如何在JS中枚举数组对象并统计同部门员工总数
解决方案
要实现给每个员工添加所在部门的序号与总数标识,按以下两步操作即可:
1. 先统计各部门的员工总数
先用reduce方法遍历员工数组,生成一个以部门ID为键、员工数量为值的映射对象,后续可快速获取任意部门的总人数。
2. 遍历员工数组,添加序号与总数字段
遍历过程中用临时对象记录每个部门当前的员工序号,每遇到同部门的员工就把序号加1,再结合之前统计的部门总数,生成totalForDeparments字段的值。
完整代码示例
const employees = [ { id: 1, name: "john", department: { id: 1 } }, { id: 1, name: "Mike", department: { id: 3 } }, { id: 1, name: "Leona", department: { id: 1 } }, { id: 1, name: "Lara", department: { id: 1 } }, ]; // 统计各部门员工总数 const deptTotal = employees.reduce((acc, emp) => { const deptId = emp.department.id; acc[deptId] = (acc[deptId] || 0) + 1; return acc; }, {}); // 给每个员工添加序号和总数标识 const result = employees.map((emp) => { const deptId = emp.department.id; // 用闭包维护各部门的序号计数器 if (!result.counter) result.counter = {}; result.counter[deptId] = (result.counter[deptId] || 0) + 1; return { ...emp, totalForDeparments: `${result.counter[deptId]}/${deptTotal[deptId]}` }; }); console.log(result);
代码说明
deptTotal对象存储了每个部门的员工总数,比如部门ID为1的总数是3,部门ID为3的总数是1。- 用
map遍历员工时,通过挂载在result上的counter对象记录每个部门的当前序号,确保同部门员工的序号按遍历顺序递增。 - 最终返回的新数组中,每个员工都新增了
totalForDeparments字段,格式为"序号/部门总数"。
内容的提问来源于stack exchange,提问作者Young Al Capone
相关产品推荐
相关产品推荐

