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

如何检查多对象中的重复键并对其对应值求和?

解决思路与实现方案

这个需求其实很典型,核心就是遍历嵌套的对象结构 + 按键累加值,我结合你的示例数据给你一步步说明怎么实现:

步骤拆解

  • 先准备一个空对象,用来存储最终的键值求和结果
  • 遍历外层数组里的每一个主对象
  • 对每个主对象,取出它的subObjects数组,再遍历这个数组里的所有子对象
  • 遍历子对象的每一组键值对:如果键已经在结果对象里,就把当前值加到已有值上;如果是第一次遇到这个键,就直接把当前值赋值给它

代码实现(JavaScript)

先把你的示例数据定义好:

const data = [
  { "firstObject": 1, "subObjects": [{ "A": 1, "B": 2 }, { "C": 3, "D": 1 }] },
  { "firstObject": 2, "subObjects": [{ "A": 0, "C": 5 }, { "B": 2, "D": 2 }] }
];

然后实现求和逻辑:

// 初始化结果对象
const sumResult = {};

// 遍历外层主对象
data.forEach(mainObj => {
  // 遍历每个主对象的subObjects数组
  mainObj.subObjects.forEach(subObj => {
    // 遍历子对象的键值对
    Object.entries(subObj).forEach(([key, value]) => {
      // 累加逻辑:存在则加,不存在则初始化
      sumResult[key] = (sumResult[key] || 0) + value;
    });
  });
});

console.log(sumResult);
// 输出:{ A: 1, B: 4, C: 8, D: 3 }

更简洁的写法(用reduce)

如果你喜欢更函数式的风格,可以用reduce来合并遍历逻辑:

const sumResult = data.reduce((acc, mainObj) => {
  return mainObj.subObjects.reduce((innerAcc, subObj) => {
    Object.entries(subObj).forEach(([key, value]) => {
      innerAcc[key] = (innerAcc[key] || 0) + value;
    });
    return innerAcc;
  }, acc);
}, {});

console.log(sumResult);
// 同样输出:{ A: 1, B: 4, C: 8, D: 3 }

针对特定键的求和

如果你只想针对A、B这类指定键求和,可以加个简单的判断过滤:

const targetKeys = ['A', 'B'];
const sumResult = {};

data.forEach(mainObj => {
  mainObj.subObjects.forEach(subObj => {
    Object.entries(subObj).forEach(([key, value]) => {
      if (targetKeys.includes(key)) {
        sumResult[key] = (sumResult[key] || 0) + value;
      }
    });
  });
});

console.log(sumResult);
// 输出:{ A: 1, B: 4 }

内容的提问来源于stack exchange,提问作者Raul S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:23:23