获取数组中没有任何重复项的对象的最有效方法

Most efficient way to grab objects without any duplicates in an array

我有 2 个 JavaScript 对象数组:

arr1=[{'id':'A'},{'id':'B'}, {'id':'C'}];
arr2=[{'id':'A'},{'id':'C'}, {'id':'D'}, {'id': 'E'}];

如何只获取没有重复的元素?

谢谢。

编辑

我不想删除重复项。我只想得到独一无二的 对象。

output = [{'id':'B'}, {'id':'D'}, {'id':'E'}]

output = [{'id':'A'},{'id':'B'}, {'id':'C'}, {'id':'D'}, {'id':'E'}]

对不起,如果我没说清楚

arr1=[{'id':'A'},{'id':'B'}, {'id':'C'}];
arr2=[{'id':'A'},{'id':'C'}, {'id':'D'}, {'id': 'E'}];

const out = Object.entries(arr1.concat(arr2).reduce((a, c) => {
  a[c.id] = a[c.id] || 0;
  a[c.id]++;
  return a;
}, {})).filter(([k, v]) => v === 1).map(([k]) => ({id: k}));

console.log(out);

这个问题被问了很多,但在那种特殊情况下可以这样解决:

好吧,也许不是。这是按照您的要求检索输出的一种方法:

arr1=[{'id':'A'},{'id':'B'}, {'id':'C'}];
arr2=[{'id':'A'},{'id':'C'}, {'id':'D'}, {'id': 'E'}];

function getUniques(arr) {
  let counter = arr.reduce((acc, val) =>
    (acc[val.id] = (acc[val.id] || 0) + 1, acc), {});
  return Object.keys(counter)
    .filter(k => counter[k] === 1)
    .map(k => ({id: k}));
}

console.log(getUniques([...arr1, ...arr2]));

有点乱,但很管用。首先找到只出现一次的 ID,然后过滤组合数组以仅包含唯一 ID。

arr1 = [{ id: "A" }, { id: "B" }, { id: "C" }];
arr2 = [{ id: "A" }, { id: "C" }, { id: "D" }, { id: "E" }];

function getCount(array, elem) {
    return array.filter((e) => e === elem).length;
}

uniqueIds = [...arr1, ...arr2]
    .map((e) => e.id)
    .filter((e, i, a) => getCount(a, e) === 1);

let uniques = [...arr1, ...arr2].filter((e) => uniqueIds.includes(e.id));

console.log(uniques);

另一种方法:

 arr1=[{'id':'A'},{'id':'B'}, {'id':'C'}];
 arr2=[{'id':'A'},{'id':'C'}, {'id':'D'}, {'id': 'E'}];
 var res = [];
 var newArr = arr1.concat(arr2);
 var reverseArr = newArr.slice().reverse();
 newArr.forEach((el,idx)=> {
 let iex = newArr.findIndex((e,i)=> e.id == el.id );
 if (iex === idx && iex === newArr.length - (reverseArr.findIndex((e,i)=> e.id == 
   el.id )+ 1) ){
     res.push(el)
   }
});
console.log(res)