Как получить всех сум value из объекта

Рейтинг: 0Ответов: 1Опубликовано: 01.06.2023
const arr = [{a:1},{b:2},{c:3}]
const totalValue = 6 // ?

как получить totalValue с помощью reduce

мой вариант

arr.reduce((obj, total) => Object.values(obj) + total, 0)

Ответы

▲ 2

В коде

arr.reduce((obj, total) => Object.values(obj) + total, 0)

самая первая ошибка, перепутаны местами аргументы

  • obj - в этом аргументе храниться значение с предыдущей итерации
  • total - в этом аргументе хранится объект.

Таким образом для правильного подсчета их надо поменять местами

arr.reduce((total, obj) => Object.values(obj) + total, 0)

Теперь происходит попытка сложить массив с числом. Вместо этого нужно складывать числа.

Решение зависит от того, какие объекты могут быть в массиве arr.

Если в объектах гарантированно только одно поле, достаточно просто привести полученный массив в число используя оператор Унарный плюс, либо функцию Number

const arr = [{
  a: 1
}, {
  b: 2
}, {
  c: 3
}]
const totalValue = 6 // ?

console.log(arr.reduce((total, obj) => +Object.values(obj) + total, 0), totalValue);
console.log(arr.reduce((total, obj) => Number(Object.values(obj)) + total, 0), totalValue);

Если же полей в объекте может быть несколько, необходимо правильно по которым их нужно выбирать, какое-то конкретное, либо значения всех полей

Если нужна сумма всех полей, достаточно использовать еще один .reduce

const arr = [{
  a: 1, a1: 4
}, {
  b: 2, b1: 5
}, {
  c: 3
}]
const totalValue = 15 // ?

console.log(arr.reduce((total, obj) => Object.values(obj).reduce((a,b)=>a+b,total), 0), totalValue);