繁体   English   中英

如何在不同属性比较器的两个对象数组之间获得差异?

[英]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更多用于普通对象

检查下面的代码片段,你可以使用findIndexfindsome来获取过滤后的数组中是否存在该元素。

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM