如何从 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】:重复是由每次迭代empIds
和allEmps
引起的。
尝试更改订单并检查每个员工记录的 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 个对象数组中找到唯一元素的主要内容,如果未能解决你的问题,请参考以下文章