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

如何使用Lodash按键对两个对象或对象数组求和?

使用Lodash按键对对象/对象数组求和的简便方法

当然有!Lodash里的几个工具函数组合起来,就能轻松搞定按键对对象或对象数组的求和需求,我分不同场景给你演示:

1. 两个单个对象按键求和

如果是两个独立对象,想要把相同key对应的数值相加,不同key保留原值,用_.mergeWith最合适——它允许我们自定义属性的合并逻辑。

举个实际例子:

const obj1 = { a: 10, b: 20, c: 30 };
const obj2 = { a: 5, b: 15, d: 25 };

// 封装求和函数
const sumTwoObjects = (objA, objB) => {
  return _.mergeWith({}, objA, objB, (prevValue, currValue) => {
    // 只对数字类型的属性求和,其他类型按默认逻辑合并
    if (_.isNumber(prevValue) && _.isNumber(currValue)) {
      return prevValue + currValue;
    }
  });
};

const result = sumTwoObjects(obj1, obj2);
// 输出结果: { a: 15, b: 35, c: 30, d: 25 }

这个方法还支持嵌套对象的递归求和,比如嵌套属性是数字的话也会自动相加,非常省心。

2. 单个对象数组按键求和

如果是一组对象,想要把所有对象中相同key的数值累加起来,可以用_.reduce配合上面的合并逻辑:

const objArray = [
  { a: 1, b: 2 },
  { a: 3, b: 4, c: 5 },
  { a: 5, c: 10 }
];

const sumObjectArray = (arr) => {
  return _.reduce(arr, (accumulator, currentObj) => {
    return _.mergeWith(accumulator, currentObj, (prev, curr) => {
      // 处理其中一个对象没有该key的情况,直接取存在的数值
      return _.isNumber(prev) && _.isNumber(curr) ? prev + curr : curr ?? prev;
    });
  }, {}); // 初始累加器是一个空对象
};

const arrayResult = sumObjectArray(objArray);
// 输出结果: { a: 9, b: 6, c: 15 }

3. 两个对象数组对应位置对象求和

要是你需要把两个数组中对应位置的对象按键求和(比如数组1的第1个对象和数组2的第1个对象相加),可以用_.zipWith结合之前的sumTwoObjects函数:

const arr1 = [{ a: 2, b: 3 }, { x: 10 }];
const arr2 = [{ a: 5, b: 7 }, { x: 20, y: 5 }];

const sumCorrespondingObjects = (arrA, arrB) => {
  return _.zipWith(arrA, arrB, sumTwoObjects);
};

const zipResult = sumCorrespondingObjects(arr1, arr2);
// 输出结果: [{ a:7, b:10 }, { x:30, y:5 }]

这些方法都是Lodash原生函数的组合,不需要额外写复杂的循环,简洁又可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:12:52