В коде
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);