![](/img/trans.png)
[英]Spreading arrray elements into parameters in 3rd party function javascript
[英]Spreading elements with no duplicates in Javascript
我正在尋找刪除重復項的方法。 我發現一種常見的方法是創建一個 Set,然后散布到一個新的 Array 中。
我怎樣才能完成這個目的? 例如,我有以下代碼:
const tmp1=[];
const tmp2=[{
guid:"e695d848-7188-4741-9c95-44bec634940f",
name: "Spreading.pdf",
code: "G1"
}];
const tmp = [...new Set([...tmp1],[...tmp2])]; //This should remove duplicates, but gets empty array
const x = [...tmp1, ...tmp2]; // This would keep duplicates
問題是因為 tmp1 是一個空數組,所以我得到的結果是空的。 但是,如果我執行以下操作,則會得到正確的結果:
const tmp = [...new Set(...tmp1,[...tmp2])];
我認為這里缺少一些東西。
這是一個重復條目的例子,其中 Set 就像一個魅力一樣工作,只保留一條記錄:
const tmp1=[{
guid:"e695d848-7188-4741-9c95-44bec634940f",
name: "Spreading.pdf",
code: "G1"
}];
const tmp2=[{
guid:"e695d848-7188-4741-9c95-44bec634940f",
name: "Spreading.pdf",
code: "G1"
}];
const tmp = [...new Set([...tmp1],[...tmp2])];
這是最初的想法,但是如果其中一個列表是空的呢? 然后,如果發生這種情況,我將得到一個空數組。
謝謝
Set 應該帶 1 個參數,但它帶 2 個參數,將它們合並為一個:
const tmp = [...new Set([...tmp1, ...tmp2])];
注意:此方法不會刪除重復項,因為您將 object 傳遞給集合而不是它的引用,在這種情況下,您可以改為這樣做:
const tmp1 = [];
const tmp2 = [{
guid: "e695d848-7188-4741-9c95-44bec634940f",
name: "Spreading.pdf",
code: "G1"
},
{
guid: "e695d848-7188-4741-9c95-44bec634940f",
name: "Spreading.pdf",
code: "G1"
}
];
// pass a special unique key that differs object from each other to item, in this case i passed guid
const tmp = [...new Map([...tmp1, ...tmp2].map(item => [item['guid'], item])).values()]
只是為了解釋為什么問題中的這個例子看起來有效:
const tmp1=[{
guid:"e695d848-7188-4741-9c95-44bec634940f",
name: "Spreading.pdf",
code: "G1"
}];
const tmp2=[{
guid:"e695d848-7188-4741-9c95-44bec634940f",
name: "Spreading.pdf",
code: "G1"
}];
const tmp = [...new Set([...tmp1],[...tmp2])];
結果是一個 object,因為Set()
只接受一個可迭代的 object,所以它接受第一個。
如果const tmp2=[1, 2, 3]
在上面的例子中, tmp
仍然會導致tmp1
中的那個 object 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.