JavaScript Zmniejsz pustą tablicę

104

Kiedy zmniejszam tablicę, próbuję uzyskać liczbę zero, ale nie rozumiem dokładnie zachowania funkcji

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

wynik

TypeError: Reduce of empty array with no initial value

wydaje się, że jeśli tablica jest pusta, nie mogę jej zmniejszyć

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

wynik

""

Jeśli jedynym elementem tablicy jest pusty ciąg, pobiera pusty ciąg

agusgambina
źródło

Odpowiedzi:

228

Drugi parametr dotyczy wartości początkowej.

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

lub używając ES6:

[].reduce( (previousValue, currentValue) => previousValue + currentValue, 0);
xdazz
źródło
24

Oba zachowania są zgodne ze specyfikacją .

Nie możesz reducestworzyć pustej tablicy, chyba że jawnie podasz początkową „skumulowaną” wartość jako drugi argument:

Jeśli nie podano wartości initialValue, previousValue będzie równe pierwszej wartości w tablicy, a currentValue będzie równe drugiej. Jest to błąd TypeError, jeśli tablica nie zawiera żadnych elementów i nie podano wartości initialValue.

Jeśli tablica ma co najmniej jeden element, podanie wartości początkowej jest opcjonalne. Jeśli jednak nie zostanie podany, pierwszy element tablicy jest używany jako wartość początkowa i reducekontynuuje przetwarzanie pozostałych elementów tablicy, wywołując wywołanie zwrotne. W twoim przypadku tablica zawiera tylko jeden element, więc ten element staje się wartością początkową, a także wartością końcową, ponieważ nie ma więcej elementów do przetworzenia przez wywołanie zwrotne.

Jon
źródło