在下面的示例中,您會看到一些嘈雜但簡單的實作。
初始情況
我們有一個包含重復資訊的初始陣列。
const listArray = [
{ songBy: 'George Michael', uid: 'A', whatEver: 12},
{ songBy: 'George Michael', uid: 'A', whatEver: 13},
{ songBy: 'George Michael', uid: 'A', whatEver: 14},
{ songBy: 'Michael Jackson', uid: 'B', whatEver: 12},
{ songBy: 'Michael Jackson', uid: 'B', whatEver: 16},
]
第1步
我們創建了一個新地圖,因為我們顯然想要保存藝術家姓名,這意味著 → 沒有藝術家姓名重復(順便說一下,我們還想去掉第三列)。
songBy出于某種原因,我們需要用作鍵。我們將它在值內更改為name.
const listMap = new Map();
listArray.forEach(
row => listMap.set(
row.songBy, {name: row.songBy, uid: row.uid}
)
);
第2步
最后,我們需要一個包含其值的陣列:
const distinctListArray: Array<any> = [];
listMap.forEach(value => distinctListArray.push(value));
因此,我們以以下形式將結果作為不同物件的陣列來實作:
[
name: string
uid: string
]
題:
在我看來,這個實作太吵了,也不那么優雅。步驟太多,變數太多。(這里的這個例子是我不能分享的真實代碼的簡化版本)。
有沒有辦法簡化代碼并提高效率?
編輯:在線查看:TypeScript Playground
uj5u.com熱心網友回復:
使用將串列轉換為[key, value]對Array.map(),然后從串列創建映射。通過應用于迭代器(TS playground )將回傳轉換Map為陣列:Array.from()Map.values()
const listArray = [{"songBy":"George Michael","uid":"A","whatEver":12},{"songBy":"George Michael","uid":"A","whatEver":13},{"songBy":"George Michael","uid":"A","whatEver":14},{"songBy":"Michael Jackson","uid":"B","whatEver":12},{"songBy":"Michael Jackson","uid":"B","whatEver":16}]
const distinctListArray = Array.from(
new Map(listArray.map(({ songBy, uid }) =>
[songBy, { name: songBy, uid }]
)).values()
)
console.log(distinctListArray)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/434468.html
標籤:javascript 数组 打字稿 字典
上一篇:比較嵌套字典之間的鍵值
下一篇:在嵌套字典中查找鍵的總數?
