簡體   English   中英

在 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 。

更多關於Set()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM