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

合并数组中重复对象并对results值求和的实现方法

实现思路与代码示例

核心就是用reduce做分组累加,步骤如下:

  • 初始化一个空对象作为累加器,用来按team存储合并后的结果
  • 遍历数组中的每个对象:
    1. 取出当前对象的team和results
    2. 如果累加器中已有该team的记录,就把results里的每个字段(passed、failed等)和已有记录的对应字段相加
    3. 如果没有该team的记录,就创建一个新对象存入累加器,结构和原数组对象一致
  • 最后把累加器的所有值提取出来,就是合并后的数组

代码实现

// 示例原数组
const originalArray = [
  { team: "Team A", results: { passed: 5, failed: 1, flaky: 0, skipped: 2, timedOut: 0 } },
  { team: "Team B", results: { passed: 3, failed: 2, flaky: 1, skipped: 0, timedOut: 1 } },
  { team: "Team A", results: { passed: 4, failed: 0, flaky: 2, skipped: 1, timedOut: 0 } },
  { team: "Team C", results: { passed: 7, failed: 0, flaky: 0, skipped: 0, timedOut: 0 } },
  { team: "Team B", results: { passed: 2, failed: 1, flaky: 0, skipped: 3, timedOut: 0 } }
];

const mergedArray = Object.values(originalArray.reduce((acc, current) => {
  const { team, results } = current;
  // 如果当前team已存在,累加results字段
  if (acc[team]) {
    acc[team].results.passed += results.passed;
    acc[team].results.failed += results.failed;
    acc[team].results.flaky += results.flaky;
    acc[team].results.skipped += results.skipped;
    acc[team].results.timedOut += results.timedOut;
  } else {
    // 不存在则创建新条目,浅拷贝results避免修改原数组
    acc[team] = {
      team,
      results: { ...results }
    };
  }
  return acc;
}, {}));

console.log(mergedArray);

灵活优化点

如果results里的字段可能后续新增,不想硬写每个字段名,可以用Object.keys()遍历results的键来动态累加,避免漏字段:

// 替换累加部分的代码
if (acc[team]) {
  Object.keys(results).forEach(key => {
    acc[team].results[key] += results[key];
  });
}

这样不管后续results新增什么数值字段,都能自动处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:36:33