Подтвердить что ты не робот

Javascript Уменьшить пустой массив

Когда я уменьшаю массив, я пытаюсь получить число ноль, но я не понимаю, как работает функция

[].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});

результат

TypeError: Reduce of empty array with no initial value

кажется, что если массив пуст, я не могу его уменьшить

[""].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});

результат

""

Если единственным элементом в массиве является пустая строка, извлекается пустая строка

4b9b3361

Ответ 1

Второй параметр предназначен для начального значения.

[].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
}, 0);

или используя ES6:

[].reduce( (previousValue, currentValue) => previousValue + currentValue, 0);

Ответ 2

Оба поведения соответствуют спецификации.

Вы не можете reduce пустым массивом, если явно не указать начальное "накопленное" значение в качестве второго аргумента:

Если начального значения не было предоставлено, тогда значение предыдущего значения будет равно первое значение в массиве и currentValue будет равно второй. Это TypeError, если массив не содержит элементов и initialValue не предоставляется.

Если массив имеет хотя бы один элемент, то предоставление начального значения является необязательным. Однако, если один из них не указан, первый элемент массива используется как начальное значение, а reduce продолжает обрабатывать остальные элементы массива, вызывая обратный вызов. В вашем случае массив содержит только один элемент, поэтому элемент становится начальным значением, а также конечным значением, так как больше нет элементов для обработки через обратный вызов.