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

动态键对象数组合并:同周同角色工时求和的实现问题

实现方案

你可以先通过一个临时映射对象完成同周同角色的工时累加,再转换为要求的数组结构,这种方式逻辑更简单,性能也比每次在数组中查找匹配项更好:

完整代码

function reduceArray(arr) {
  // 先用对象做累加映射,key为周次,value存储对应周所有角色的工时总和
  const weekMap = arr.reduce((acc, currentItem) => {
    // 提取当前项的周次(每个元素只有一个key,就是周次)
    const currentWeek = Object.keys(currentItem)[0];
    // 提取当前项的角色和对应工时
    const currentRoleData = currentItem[currentWeek];
    const currentRole = Object.keys(currentRoleData)[0];
    const currentHours = currentRoleData[currentRole];

    // 周次不存在则初始化
    if (!acc[currentWeek]) {
      acc[currentWeek] = {};
    }
    // 角色不存在则初始化为0后累加,否则直接累加
    acc[currentWeek][currentRole] = (acc[currentWeek][currentRole] || 0) + currentHours;
    return acc;
  }, {});

  // 将映射对象转换为要求的数组格式
  return Object.entries(weekMap).map(([week, roleHours]) => ({
    [week]: roleHours
  }));
}

把你给出的输入传入该函数,即可得到预期的输出结果。


原有代码的问题

  1. reduce回调没有返回累加的结果数组,导致每次迭代的累加值都是undefined
  2. 周次匹配逻辑错误:你写的x[prop] === item[prop]是比较两个对象,对象为引用类型,就算内容一致也不会相等,实际应该比较的是键名(周次的字符串值)是否相等
  3. 角色匹配逻辑错误:你写的x[prop][subProp] === item[prop][subProp]是在比较工时数值,实际应该比较角色名是否相同,相同就累加工时

内容的提问来源于stack exchange,提问作者user2868900

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:54:04