uniquewith 从第一个数组中返回一个元素 loadash

问题描述 投票:0回答:1

我有一个

let obj = [{Id: "C87408"}, {Id: "C87402"}, {Id: "C87409"}]
let obj2 = [{Id: "C874018"}, {Id: "C87412"}, {Id: "C87419"}]

在这里,我试图使用uniqwith来删除重复的元素,如果有的话。

所以,我使用的方法是,

let final = _.uniqWith([...obj, ...obj2], node => node.id)

在这里,它只返回一个元素,那就是 {Id: "C87408"}

那么,为什么会出现这种情况呢?

谢谢。

javascript reactjs lodash
1个回答
2
投票

你的比较器函数是不正确的:它应该使用两个参数,这样它就可以比较两个独立的节点。

(a, b) => a.Id === b.Id

参见概念验证的例子。

let obj = [{Id: "C87408"}];
let obj2 = [{Id: "C87408"}, {Id: "C99999"}];

let final = _.uniqWith([...obj, ...obj2], (a, b) => a.Id === b.Id);

console.log(final);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

更新: 正如其他人在评论中指出的那样,您还可以使用 _.uniqBy 为一个更短的选择。

let obj = [{Id: "C87408"}];
let obj2 = [{Id: "C87408"}, {Id: "C99999"}];

let final = _.uniqBy([...obj, ...obj2], 'Id');

console.log(final);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
© www.soinside.com 2019 - 2024. All rights reserved.