Это не сильно отличается от вашей версии, но я думаю, что это немного чище.
Он также гарантирует, что результирующий объект имеет все ключи от обоих объектов, и по умолчанию равен 0 для значения obj2
, когда в obj2
отсутствует ключ, который находится в obj
.
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
не имеет соответствующего свойства).
Вы могли бы добавить больше безопасности, проверив типы значений, чтобы убедиться, что они являются числами, но я думаю, что это достаточно солидно, в противном случае.