Подскажите почему в примере
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.
Потому что если начальное значение не задавать, то в его качестве будет использоваться нулевой элемент массива.
Потому что редьюс при запуске уже выполнил один цикл, если отсутствует стандартное значение.
При первом вызове функции, параметры accumulator и currentValue могут принимать одно из двух значений. Если при вызове reduce() передан аргумент initialValue, то значение accumulator будет равным значению initialValue, а значение currentValue будет равным первому значению в массиве. Если аргумент initialValue не задан, то значение accumulator будет равным первому значению в массиве, а значение currentValue будет равным второму значению в массиве.
Метод 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.