如何检查多对象中的重复键并对其对应值求和?
解决思路与实现方案
这个需求其实很典型,核心就是遍历嵌套的对象结构 + 按键累加值,我结合你的示例数据给你一步步说明怎么实现:
步骤拆解
- 先准备一个空对象,用来存储最终的键值求和结果
- 遍历外层数组里的每一个主对象
- 对每个主对象,取出它的
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.
相关产品推荐
相关产品推荐

