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 ответа:
второй параметр для начального значения.
[].reduce(function(previousValue, currentValue){ return Number(previousValue) + Number(currentValue); }, 0);
или с помощью ES6:
[].reduce( (previousValue, currentValue) => previousValue + currentValue, 0);
оба поведения соответствуют спец.
вы не можете
reduce
пустой массив, если вы явно не предоставите начальное "накопленное" значение в качестве второго аргумента:Если значение initialValue не было предоставлено, то значение previousValue будет равно первое значение в массиве и currentValue будет равно второй. Это TypeError, если массив не содержит элементов и initialValue не предусмотрено.
Если массив имеет по крайней мере один элемент, то предоставление начального значения является необязательным. Однако, если он не указан, то первый элемент массива используется в качестве начального значения и
reduce
продолжает обрабатывать остальные элементы массива, вызывая обратного звонка. В вашем случае массив содержит только один элемент, так что элемент становится начальным значением, а также конечным значением, так как нет больше элементов, которые будут обрабатываться через обратный вызов.