![](/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.