javascript - 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"}
那么,为什么会发生这种情况?
谢谢。
解决方案
您的比较器函数不正确:它应该使用两个参数,以便它可以比较两个单独的节点:
(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>
推荐阅读
- javascript - 为什么增加按钮最小宽度的过渡不起作用?
- javascript - 如何使用相同的按钮停止播放音频
- docker - 部署到 k8s 后的 Dockerfile WORKDIR
- python - Python - 通过 Zeep SOAP 查询 Solarwinds N-Central 的 TypeError
- android - 如何在 Android 中从位图中写入和读取元数据?
- flask-migrate - 为什么添加新字段后烧瓶模型没有迁移
- python - Matplotlib - 显示 .plot 和 .bar 的图例
- java - 第一次导入新项目时如何避免下载gradle zip文件
- android - 使用 Onesignal 和 Firebase 的 React Native 中的错误通知
- amazon-web-services - AWS Instance Scheduler Schedule empty 问题