Вы можете использовать reduce()
const arr = [
{"name": "First value", "amount": 2},
{"name": "Second value", "amount": 4},
{"name": "First value", "amount": 6}
]
const res = arr.reduce((ac, {name, amount}) => {
ac[name] = ac[name] || 0;
ac[name] += amount;
return ac;
},{})
console.log(res)
Пояснение:
Прежде всего, мы инициализируем ac
пустым объектом {}
. Смотри строчку
arr.reduce((ac, {name, amount}) => {...}
^^^^^^^^^^^^^^
Выделенная часть называется разрушением объекта. Он получит свойство name
и amount
текущего объекта, через который мы выполняем итерацию, и сделает его независимыми переменными.
см. Строку
ac[name] = ac[name] || 0;
Теперь эта строка проверяет, не существует ли ac[name]
для объекта ac
, тогда оно будет undefined
, поэтому undefined || 0
будет оцениваться как 0
. Если оно будет иметь значение, значение ac[name]
останется прежним.
см. Третью строку:
ac[name] += amount;
Эта строка добавит amount
к уже значению ac[name]
Наконец, мы возвращаем ac
, чтобы оно стало начальным значением ac
для следующей итерации.