You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:20:28