繁体   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