我有以下两个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欢迎
答案 0 :(得分:7)
您可以反转比较(等于而不是等于)并返回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);
答案 1 :(得分:0)
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);