[英]How to get difference between two array of object with different property comparer?
我有这两个数组:
主要:
[
{ id: "1"},
{ id: "2"},
{ id: "3"}
]
过滤:
[
{ id: "80", link_id: "1"},
{ id: "50", link_id: null},
{ id: "67", link_id: "3"}
]
我需要获取main
的项目,其中包含filtered
的属性为: link_id
,我试过:
main.filter(x => filtered.includes(x.id));
问题是这将返回null,而且这也不允许我检查link_id
是否为null
var main = [{ id: "1" }, { id: "2" }, { id: "3" } ], filtered = [{ id: "80", link_id: "1" }, { id: "50", link_id: null }, { id: "67", link_id: "3" } ], result = main.filter(x => filtered.includes(x.id) ); console.log(result)
尝试使用some()
方法
var main = [ { id: "1"}, { id: "2"}, { id: "3"} ] var filtered = [ { id: "80", link_id: "1"}, { id: "50", link_id: null}, { id: "67", link_id: "3"} ] console.log(main.filter(x => filtered.some(item => item.link_id === x.id) ));
你很接近,基本上你需要检查filtered
数组的每个项目。 如文档所述, includes
更多用于普通对象。
检查下面的代码片段,你可以使用findIndex
, find
或some
来获取过滤后的数组中是否存在该元素。
const main = [{ id: "1" }, { id: "2" }, { id: "3" } ] const filtered = [{ id: "80", link_id: "1" }, { id: "50", link_id: null }, { id: "67", link_id: "3" } ] const resultFindIndex = main.filter(item => -1 !== filtered.findIndex(filteredItem => item.id === filteredItem.link_id)) const resultFind = main.filter(item => filtered.find(filteredItem => item.id === filteredItem.link_id)) const resultSome = main.filter(item => filtered.some(filteredItem => item.id === filteredItem.link_id)) console.log(resultFindIndex) console.log(resultFind) console.log(resultSome)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.