[英]Count of unique values in two distinct array of object
假设 arr1 和 arr2 是两个不同的门,我们必须找到从不同门进入的员工的数量。
我试图解决这个问题,但 output 应该是{ Cognizant: 1, Infosys: 1, Wipro: 2 }
相反,我得到{ Cognizant: 1, Infosys: 2, Wipro: 3 }
const arr1 = [{
empId: 1,
employer: 'Infosys',
}, {
empId: 2,
employer: 'Wipro',
},
{
empId: 3,
employer: 'Cognizant',
}]
const arr2 = [{
empId: 1,
employer: 'Infosys',
}, {
empId: 2,
employer: 'Wipro',
}, {
empId: 3,
employer: 'Wipro'
}]
我的方法
const arr3 = [...arr1, ...arr2]
console.log(arr3)
const output = arr3.reduce(function (acc, curr) {
if(acc[curr.employer])
{
acc[curr.employer] = ++acc[curr.employer]
}
else {
acc[curr.employer] = 1
}
return acc
},{})
console.log(output)
spread operator
,连接两个 arrays。 使用Array#reduce
迭代结果列表,同时更新Map
,其中雇主是key
,员工 ID 列表是value
。 这将导致对每个雇主的员工 ID 进行分组。Map#entries
和Array#reduce
迭代结果对,同时更新 object ,其中雇主/门是key
,其唯一 ID 的数量(使用Set
)是value
。 const arr1 = [ { empId: 1, employer: 'Infosys' }, { empId: 2, employer: 'Wipro', }, { empId: 3, employer: 'Cognizant' } ], arr2 = [ { empId: 1, employer: 'Infosys', }, { empId: 2, employer: 'Wipro' }, { empId: 3, employer: 'Wipro' } ]; const employerEmployeesMap = [...arr1, ...arr2].reduce((map, { empId, employer }) => map.set(employer, [...(map.get(employer)?? []), empId]), new Map); const gatesCount = [...employerEmployeesMap.entries()].reduce((map, [ gate, employeeIds ]) => ({...map, [gate]: (new Set(employeeIds)).size }), {}); console.log(gatesCount);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.