2014-04-29 15 views
56

Kiedy zmniejszyć tablicę, próbuję uzyskać numer zerowy, ale wyraźnie nie rozumiem zachowania funkcjiJavaScript Zmniejszyć pustą tablicę

[].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ę zmniejszyć

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

wynik

"" 

Jeśli jedynym elementem tablicy jest pustym, pobiera pustym ciągiem

Odpowiedz

113

The second parameter jest dla 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); 
14

Oba zachowania są według the spec.

Nie można reduce pusta tablica, chyba że wyraźnie stanowić wstępną „skumulowaną” wartość jako drugi argument:

Jeśli nie InitialValue został przewidziany, a następnie previousValue będzie równa pierwsza wartość w tablicy i currentValue będzie równa sekunda. Jest to TypeError, jeśli tablica nie zawiera żadnych elementów i nie podano wartości początkowej initialValue.

Jeśli tablica ma co najmniej jeden element, podanie wartości początkowej jest opcjonalne. Jeśli jednak nie podano, pierwszy element tablicy jest używany jako wartość początkowa, a reduce przetwarza pozostałe elementy tablicy, wywołując wywołanie zwrotne. W twoim przypadku tablica zawiera tylko jeden element, więc 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.

Powiązane problemy