JavaScript

Почему меняется индекс при работе метода reduce?

Подскажите почему в примере
 let a = [0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index) { 
console.log (index)

});
в консоли мы получаем индексы от 1 до 4, но если перед закрывающей скобкой поставить любое число например
 let и = [0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index) {  
console.log (index)

},5);
мы получим индексы от 0 до 4. Как это работает и почему так происходит?
В index записывается индекс того элемента, который в данный момент находится в currentValue.

Когда мы задаём инициализирующее значение, на первой итерации в previousValue находится это самое инициализирующее значение, а в currentValue элемент массива с индексом 0. Соответственно, index === 0.

Когда мы не задаём инициализирующее значение, на первой итерации в previousValue находится элемент массива с индексом 0, а в currentValue элемент массива с индексом 1. Соответственно, index === 1.
С*
Санёк ***
74 267
Лучший ответ
Потому что если начальное значение не задавать, то в его качестве будет использоваться нулевой элемент массива.
Ам Сигем
Ам Сигем
90 570
Потому что редьюс при запуске уже выполнил один цикл, если отсутствует стандартное значение.
Дима Ефремов
Дима Ефремов
92 017
При первом вызове функции, параметры accumulator и currentValue могут принимать одно из двух значений. Если при вызове reduce() передан аргумент initialValue, то значение accumulator будет равным значению initialValue, а значение currentValue будет равным первому значению в массиве. Если аргумент initialValue не задан, то значение accumulator будет равным первому значению в массиве, а значение currentValue будет равным второму значению в массиве.
Сергей Фаст
Сергей Фаст
59 846
Метод reduce() принимает два аргумента: функцию обратного вызова и начальное значение аккумулятора. В вашем первом примере, начальное значение аккумулятора не было указано, поэтому reduce() начинает выполнение с индекса 1, а не с 0.

Во втором примере, вы указали начальное значение аккумулятора равное 5, поэтому reduce() начинает выполнение с индекса 0, а не с 1.

Если вы хотите, чтобы reduce() начинал выполнение с индекса 0, вы можете явно указать начальное значение аккумулятора равное 0, например:

let a = [0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index) { console.log (index) }, 0);


Таким образом, в консоли вы увидите индексы от 0 до 4.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

currentIndex
The index position of currentValue in the array. On first call, 0 if initialValue was specified, otherwise 1.

а initialValue - это как раз тот параметр, который там после функции-каллбека

ну в общем оно просто вот так и все