Как объяснить получаемый результат, если не указывается initialValue у .reduce() в JS?

Хотелось бы понять, что происходит "под капотом" JS, когда указываешь как "0" initialValue у метода .reduce() или НЕ указываешь его вовсе. Приведу две версии кода:

  • первая, где указано значение "0" initialValue у метода .reduce()
  • вторая версия, где initialValue у метода .reduce() НЕ указан.

Результаты в консоль выводятся такие:

  • в первой версии: "5"
  • во второй версии: "5.888888888888888"

Вопрос: почему такая разница? Почему так получается? Возможно, ошибочный код?

Вот версия №1:

const arrayNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];

const average = arrayNumbers.reduce((acc, num) => acc + num / arrayNumbers.length, 0)

console.log(average)//5

Вот версия № 2:

const arrayNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];

const average = arrayNumbers.reduce((acc, num) => acc + num / arrayNumbers.length)

console.log(average)//5.888888888888888

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

Автор решения: Rashid

Разобрался! Когда мы не указываем initialValue, тогда accumulator принимает значение первого элемента. Отсюда и разница в результатах.

→ Ссылка