为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

凤凰求蛊 2022-09-16 21:48:54
我有2个脚本对象数组: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'}]抱歉,如果我不清楚
查看完整描述

4 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

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);


查看完整回答
反对 回复 2022-09-16
?
智慧大石

TA贡献1946条经验 获得超3个赞

有点乱,但它有效。首先查找仅出现一次的 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);


查看完整回答
反对 回复 2022-09-16
?
慕沐林林

TA贡献2016条经验 获得超9个赞

好吧,所以也许不是。以下是一种像您要求的那样检索输出的方法:


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]));


查看完整回答
反对 回复 2022-09-16
?
SMILET

TA贡献1796条经验 获得超4个赞

只是另一种方法:


 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) 


查看完整回答
反对 回复 2022-09-16
  • 4 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信