Javascript Зменшити порожній масив


104

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

[].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);
});

результат

""

Якщо єдиним елементом масиву є порожній рядок, витягується порожній рядок

Відповіді:


228

Другий параметр - для початкового значення.

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

або за допомогою ES6:

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

24

Обидві поведінки відповідають специфікації .

reduceПорожній масив не може бути , якщо явно не вказати початкове "накопичене" значення як другий аргумент:

Якщо не було надано початкового Value, то попереднєValue буде дорівнює першому значенню масиву, а currentValue дорівнює другому. Це TypeError, якщо масив не містить елементів, а початковаValue не надана.

Якщо масив містить щонайменше один елемент, то надання початкового значення необов'язково. Однак якщо такий не надається, перший елемент масиву використовується як початкове значення і reduceпродовжує обробляти решту елементів масиву шляхом виклику зворотного виклику. У вашому випадку масив містить лише один елемент, так що цей елемент стає початковим значенням, а також кінцевим значенням, оскільки немає більше елементів, які обробляються через зворотний виклик.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.