JS比较两个数组与对象并通过属性名称ES6方式删除重复项

tes*_*est 2 javascript ecmascript-6

想要将两个数组与对象进行比较并通过其属性名称删除重复项,我有这两个:

arr1 = [{
  item:"apple",
  description: "lorem"
},{
  item:"peach",
  description: "impsum"
}]

arr2 = [{
  item:"apple", description: "dolor"
},{
  item:"grape", description: "enum"
}]
Run Code Online (Sandbox Code Playgroud)

我想要这个结果:

arr3 = [{
  item:"peach", description: "impsum"
},{
  item:"grape", description: "enum"
}]
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这种 es6 方法但不起作用arr3 = arr1.filter(val => !arr2.includes(val));

ibr*_*rir 8

Array.includes不会工作,因为在 javascript 中{} !== {}。您需要另一种方法,例如Array.every检查另一个数组中的每个对象是否具有item与当前对象相同的属性值。另外,您需要同时执行arr1.filter(...)andarr2.filter(...)concat结果:

arr3 = [].concat(
    arr1.filter(obj1 => arr2.every(obj2 => obj1.item !== obj2.item)),
    arr2.filter(obj2 => arr1.every(obj1 => obj2.item !== obj1.item))
);
Run Code Online (Sandbox Code Playgroud)

例子:

arr3 = [].concat(
    arr1.filter(obj1 => arr2.every(obj2 => obj1.item !== obj2.item)),
    arr2.filter(obj2 => arr1.every(obj1 => obj2.item !== obj1.item))
);
Run Code Online (Sandbox Code Playgroud)