#javascript #javascript-objects
#javascript #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
}
Я хотел бы объединить два объекта и суммировать значения для дублированных ключей.
Ожидаемый результат:
{
'2021-1': 20,
'2021-2': 8,
'2020-3': 10,
'2020-4': 15,
'2020-5': 12,
'2020-6': 4
}
Комментарии:
1. что не работает?
2. можете ли вы приложить решение, как я могу получить результат, используя чистый javascript или Lodash?
Ответ №1:
Вы можете выполнить операцию уменьшения над записями второго объекта, чтобы суммировать значения каждого ключа, используя копию первого объекта в качестве начального значения.
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);
Ответ №2:
Эта служебная функция объединяет два объекта и суммирует конфликтующие ключи, включая все значения, уникальные для либо a
или b
.
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));
Комментарии:
1. Спасибо за ваш ответ, @soimon, но это не работает должным образом. «2021-1» должно быть 20
2. @WilliamWang вы правы, я забыл скобки. Я исправил это, но поскольку принятый ответ iota функционально равен, тривиально, с каким подходом вы идете.
Ответ №3:
вот еще одно решение
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, и мы разрушаем массив, содержащий ключ и значение