繁体   English   中英

将两个Arrays与Objects进行比较,并使用不匹配的对象创建新数组

[英]Compare two Arrays with Objects and create new array with unmatched objects

我有以下两个Javascript数组:

const array1 = [{ id: 1}, { id: 2 }, { id: 3 }, { id: 4}];
const array2 = [{ id: 1}, { id: 3 }];

我现在想要一个新的数组array3 ,它只包含那些不在array2的对象,所以:

const array3 = [{ id: 2}, { id: 4 }];

我尝试了以下但它返回所有对象,当我将条件更改为===它返回array2的对象。

const array3 = array1.filter(entry1 => {
  return array2.some(entry2 => entry1.id !== entry2.id);
});

任何想法? ES6欢迎

你可以反转比较(等于而不是不等)并返回some的否定结果。

 const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }], array2 = [{ id: 1 }, { id: 3 }], array3 = array1.filter(entry1 => !array2.some(entry2 => entry1.id === entry2.id)); // ^ ^^^ console.log(array3); 

Nina的答案是一个良好的开端,但会遗漏数组2中的任何独特元素。这扩展了她的答案,从每个数组中获取独特的元素,然后将它们组合起来:

 const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }], array2 = [{ id: 1 }, { id: 3 }, { id: 5 }], array3 = array1.filter(entry1 => !array2.some(entry2 => entry1.id === entry2.id)), array4 = array2.filter(entry1 => !array1.some(entry2 => entry1.id === entry2.id)), array5 = array3.concat(array4); console.log(array5); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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