繁体   English   中英

object 的两个不同数组中唯一值的计数

[英]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#entriesArray#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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM