微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何合并具有重复键和值的两个对象

如何解决如何合并具有重复键和值的两个对象

我有两个对象如下:

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
}

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

预期结果是:

{
  '2021-1': 20,'2021-2': 8,'2020-6': 4
}

解决方法

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

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);

,

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

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,'2020-6': 4
}

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

,

这是另一种解决方案

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 并且我们解构包含键和值的数组

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。