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

如何实现JavaScript对象同名属性值相加的合并操作?

如何实现对象属性值相加的合并操作?

你想要的是属性值相加的对象合并,Object.assign()的逻辑是直接覆盖同名属性,自然达不到你要的效果。这里有几种实用的实现方法:

方法一:手动遍历属性(适合两个对象合并)

这种方式直观易懂,还能避免修改原对象:

const obj1 = { a: 1, b: 1, c: 1 };
const obj2 = { a: 1, b: 1 };

const mergeWithSum = (target, source) => {
  // 先复制目标对象的所有属性到新对象
  const result = { ...target };
  // 遍历源对象的每个属性
  for (const key in source) {
    if (source.hasOwnProperty(key)) {
      // 有同名属性就相加,没有就直接赋值(默认0加源值)
      result[key] = (result[key] || 0) + source[key];
    }
  }
  return result;
};

const mergedObj = mergeWithSum(obj1, obj2);
console.log(mergedObj); // 输出: { a: 2, b: 2, c: 1 }

方法二:用reduce处理所有键

如果想确保不遗漏两个对象的任何属性,可以先收集所有键,再用reduce累加:

const obj1 = { a: 1, b: 1, c: 1 };
const obj2 = { a: 1, b: 1 };

const mergeWithSum = (obj1, obj2) => {
  // 合并两个对象的所有键,用Set去重
  const allKeys = new Set([...Object.keys(obj1), ...Object.keys(obj2)]);
  // 遍历所有键,累加对应的值
  return Array.from(allKeys).reduce((acc, key) => {
    acc[key] = (obj1[key] || 0) + (obj2[key] || 0);
    return acc;
  }, {});
};

const mergedObj = mergeWithSum(obj1, obj2);
console.log(mergedObj); // 输出: { a: 2, b: 2, c: 1 }

方法三:支持合并多个对象

如果需要一次性合并多个对象,可以扩展成接收任意数量参数的函数:

const obj1 = { a: 1, b: 1, c: 1 };
const obj2 = { a: 1, b: 1 };
const obj3 = { b: 2, d: 3 };

const mergeMultipleWithSum = (...objects) => {
  return objects.reduce((acc, currentObj) => {
    for (const key in currentObj) {
      acc[key] = (acc[key] || 0) + currentObj[key];
    }
    return acc;
  }, {});
};

const mergedObj = mergeMultipleWithSum(obj1, obj2, obj3);
console.log(mergedObj); // 输出: { a: 2, b: 4, c: 1, d: 3 }

这些方法都能保持原对象不变,返回一个新的合并后的对象,完全符合你的需求~

内容的提问来源于stack exchange,提问作者Jakub Kopyś

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:14:56