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);
});

результат

""

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

2 68

2 ответа:

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

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

или с помощью ES6:

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

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

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

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

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