首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将两个对象合并为重复的键求和值

如何将两个对象合并为重复的键求和值
EN

Stack Overflow用户
提问于 2021-01-14 15:12:44
回答 3查看 242关注 0票数 0

我有两个目标如下:

代码语言:javascript
运行
复制
const a = {
  '2021-1': 10,
  '2021-2': 8
}
const b = {
  '2021-1': 10,
  '2020-3': 10,
  '2020-4': 15,
  '2020-5': 12,
  '2020-6': 4
}

我想合并两个对象并总结重复键的值。

预期结果是:

代码语言:javascript
运行
复制
{
  '2021-1': 20,
  '2021-2': 8,
  '2020-3': 10,
  '2020-4': 15,
  '2020-5': 12,
  '2020-6': 4
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-14 15:18:46

您可以对第二个对象的条目执行约简操作,使用第一个对象的副本作为初始值,对每个键的值进行求和。

代码语言:javascript
运行
复制
const a = {
  '2021-1': 10,
  '2021-2': 8
}
const b = {
  '2021-1': 10,
  '2020-3': 10,
  '2020-4': 15,
  '2020-5': 12,
  '2020-6': 4
}
const res = Object.entries(b).reduce((acc,[k,v])=>{
  acc[k] = (acc[k] || 0) + v;
  return acc;
}, {...a});
console.log(res);

票数 5
EN

Stack Overflow用户

发布于 2021-01-14 15:22:23

此实用程序函数合并两个对象并对冲突的键进行求和,包括ab唯一的所有值。

代码语言:javascript
运行
复制
const mergeWithSum = (a, b) =>
  [...Object.keys(a), ...Object.keys(b)].reduce((combined, key) => {
    combined[key] = (a[key] ?? 0) + (b[key] ?? 0);
    return combined;
  }, {});

const a = {
  '2021-1': 10,
  '2021-2': 8
}
const b = {
  '2021-1': 10,
  '2020-3': 10,
  '2020-4': 15,
  '2020-5': 12,
  '2020-6': 4
}

console.log(mergeWithSum(a, b));

票数 2
EN

Stack Overflow用户

发布于 2021-01-14 15:29:30

这是另一个解决方案

代码语言:javascript
运行
复制
function mergeObj(obja, objb) {
    const merged = {...obja};
    for ([key, value] of Object.entries(objb)) {
        if(merged.hasOwnProperty(key)) {
           merged[key] = merged[key] + value
        } else {
           merged[key] = value
        }
    }
    return merged
}

它使用了一个简单的for of循环,来自object.entries,我们构造了包含键和值的数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65721625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档