例如,我有两个对象
const obj = {
CRITICAL: 0,
ERROR: 1,
INFO: 0,
WARNING: 0,
};
const obj = {
CRITICAL: 0,
ERROR: 0,
INFO: 0,
WARNING: 1,
};
我想将每个属性的总和像这样组合到一个对象中
{
CRITICAL: 0,
ERROR: 1,
INFO: 0,
WARNING: 1,
};
我想出的方法是
Object.keys(obj).reduce((prev,curr)=>{
prev[curr] = obj[curr] + obj2[curr];
return prev
},{});
但是我认为有更好的方法可以做到这一点。你们能给我一些其他方法吗?
答案 0 :(得分:1)
这与您的版本没有太大不同,但我认为它稍微干净一些。
它还可以确保生成的对象具有两个对象中的所有键,并且当obj2
缺少obj2
中的键时,obj
值的默认值为0。 / p>
const obj = {
CRITICAL: 0,
ERROR: 1,
INFO: 0,
WARNING: 0,
OBJECT1: 1
}
const obj2 = {
CRITICAL: 0,
ERROR: 0,
INFO: 0,
WARNING: 1,
OBJECT2: 1
}
console.log(
Object.entries(obj).reduce(
(prev, [key, value])=> {
prev[key] = value + (prev[key] || 0)
return prev
},
{ ...obj2 } // spread to avoid mutating obj2
)
)
说明:在这里,我已将累加器(prev
)初始化为obj2
的浅表克隆。这样,我们保证将obj2
中的所有属性保留在结果对象中(当obj
没有匹配属性时,它们的值不变)。
如果未找到obj2[key]
,我也默认将其设置为零,以确保obj
中的所有属性都将被传递给结果对象(当obj2
不存在时,其值保持不变没有匹配的属性。
您可以通过检查值的类型以确保它们是数字来增加一些安全性,但否则,我认为它是合理的。