我有一个
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"}
那么,为什么会出现这种情况呢?
谢谢。
你的比较器函数是不正确的:它应该使用两个参数,这样它就可以比较两个独立的节点。
(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>