Хочу выяснить сумму возрастов, выдаёт NaN. В чём ошибка?

const arr = [
  {name: "Саша", age: 19},
  {name: "Катя", age: 21},
  {name: "Миша", age: 17},
  {name: "Федя", age: 23},
  {name: "Клава", age: 22}
];

const arr2 = arr.reduce((prev, item) => {
  return prev.age + item.age;
})

console.log(arr2)

Ответы (2 шт):

Автор решения: Alex Krass

Вы возвращаете число и prev становится числом на следующей итерации, поэтому никакого age у него больше нет. Либо возвращайте объект с этим самим age как return { age : prev.age + item.age }, либо используйте только числа с начальным значением 0.

var arr = [
  {name: "Саша", age: 19},
  {name: "Катя", age: 21},
  {name: "Миша", age: 17},
  {name: "Федя", age: 23},
  {name: "Клава", age: 22}
];

var arr2 = arr.reduce((prev, item) => {
  return prev + item.age;
}, 0)

console.log(arr2)

→ Ссылка
Автор решения: Grundy

первый параметр в функции, передаваемой reduce в качестве callback, хранит значение на предыдущей итерации.

В данном случае, на первой итерации - значение берется из первого элемента, на второй и последующих - это значение число, у которого нет свойства age.

Проще всего, всегда считать, что накапливается число, для этого нужно указать начальное значение, например 0

const arr = [{
    name: "Саша",
    age: 19
  },
  {
    name: "Катя",
    age: 21
  },
  {
    name: "Миша",
    age: 17
  },
  {
    name: "Федя",
    age: 23
  },
  {
    name: "Клава",
    age: 22
  }
];

const arr2 = arr.reduce((prev, item) => {
  return prev + item.age;
}, 0)

console.log(arr2)

→ Ссылка