Javascript Riduci un array vuoto


104

Quando riduco l'array, cerco di ottenere il numero zero, ma non capisco chiaramente il comportamento della funzione

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

risultato

TypeError: Reduce of empty array with no initial value

sembra che se l'array è vuoto non posso ridurlo

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

risultato

""

Se l'unico elemento dell'array è una stringa vuota, recupera una stringa vuota

Risposte:


228

Il secondo parametro è per il valore iniziale.

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

o utilizzando ES6:

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

24

Entrambi i comportamenti sono conformi alle specifiche .

Non è possibile reduceun array vuoto a meno che non si fornisca esplicitamente un valore iniziale "accumulato" come secondo argomento:

Se non è stato fornito initialValue, previousValue sarà uguale al primo valore nella matrice e currentValue sarà uguale al secondo. È un TypeError se l'array non contiene elementi e initialValue non viene fornito.

Se l'array ha almeno un elemento, fornire un valore iniziale è facoltativo. Tuttavia, se non ne viene fornito uno, il primo elemento dell'array viene utilizzato come valore iniziale e reducecontinua a elaborare il resto degli elementi dell'array invocando il callback. Nel tuo caso l'array contiene solo un singolo elemento, quindi quell'elemento diventa il valore iniziale e anche il valore finale, poiché non ci sono più elementi da elaborare tramite il callback.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.