首页 > 解决方案 > uniquewith 从第一个数组 loadash 返回单个元素

问题描述

我有一个

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"}

那么,为什么会发生这种情况?

谢谢。

标签: javascriptreactjslodash

解决方案


您的比较器函数不正确:它应该使用两个参数,以便它可以比较两个单独的节点:

(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>


推荐阅读