如何实现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ś
相关产品推荐
相关产品推荐

