如何从 JS 中的 2 个对象数组中找到唯一元素

Posted

技术标签:

【中文标题】如何从 JS 中的 2 个对象数组中找到唯一元素【英文标题】:How to find unique elements from 2 array of objects in JS 【发布时间】:2021-05-14 14:49:00 【问题描述】:

我有以下 2 个数组,

我想将 empIds 值与 allEmps id 值进行比较,并希望将唯一值推送到新数组,

var empIds = [ 123, 321 ];

var allEmps = [ [id: 123, name: 'Raj'], [id: 321, name: 'Raju'], [id: 931, name: 'Rahul'];

Expected output:
                [id: 931, name: 'Rahul']

我的尝试,

gridData = [];
empIds.forEach(id => 
  allEmps.forEach(series => 
    if (series[0].id !== id) 
      gridData.push(series[0]);
    
  );
);

但是这些代码也给出了重复的数据,任何人都可以更正我的代码。谢谢。

【问题讨论】:

【参考方案1】:

重复是由每次迭代empIdsallEmps 引起的。

尝试更改订单并检查每个员工记录的 ID 是否不在empIds

gridData = [];
allEmps.forEach(series => 
  if (empIds.indexOf(series[0].id) === -1)  // ID not found in empIds
    gridData.push(series[0]);
  
);
// gridData = [ id: 931, name: "Rahul" ]

【讨论】:

【参考方案2】:

试试这个:

var empIds = [ 123, 321 ];
var allEmps = [ [id: 123, name: 'Raj'], [id: 321, name: 'Raju'], [id: 931, name: 'Rahul'];

var gridData = allEmps.map(arr => arr[0]).filter(emp => !empIds.includes(emp.id)) 

你可以分步做:

var objs = allEmps.map(arr => arr[0]) 
// returns "["id":123,"name":"Raj","id":321,"name":"Raju","id":931,"name":"Rahul"]"

您不需要在数组中包含数组。 然后过滤不属于 empIds 的那些:

objs.filter(emp => !empIds.includes(emp.id)) 

【讨论】:

以上是关于如何从 JS 中的 2 个对象数组中找到唯一元素的主要内容,如果未能解决你的问题,请参考以下文章

js如何查找数组中是不是存在某个值

怎么对数组中的对象去重

关于如何去除数组中重复项

js如何查找数组中是不是存在某个值

如何将一个对象数组中的所有项目从Javascript动态显示为HTML?

如何删除多维数组中的唯一元素?