Javascript Réduit un tableau vide

104

Lorsque je réduis le tableau, j'essaie d'obtenir le nombre zéro, mais je ne comprends pas clairement le comportement de la fonction

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

résultat

TypeError: Reduce of empty array with no initial value

semble que si le tableau est vide, je ne peux pas le réduire

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

résultat

""

Si le seul élément du tableau est une chaîne vide, récupère une chaîne vide

Agusgambina
la source

Réponses:

228

Le deuxième paramètre est pour la valeur initiale.

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

ou en utilisant ES6:

[].reduce( (previousValue, currentValue) => previousValue + currentValue, 0);
xdazz
la source
24

Les deux comportements sont conformes aux spécifications .

Vous ne pouvez pas reduceun tableau vide à moins que vous ne fournissiez explicitement une valeur initiale "accumulée" comme deuxième argument:

Si aucune valeur initiale n'a été fournie, alors previousValue sera égale à la première valeur du tableau et currentValue sera égale à la seconde. Il s'agit d'une TypeError si le tableau ne contient aucun élément et que initialValue n'est pas fourni.

Si le tableau a au moins un élément, la fourniture d'une valeur initiale est facultative. Cependant, si aucun élément n'est fourni, le premier élément du tableau est utilisé comme valeur initiale et reducecontinue de traiter le reste des éléments du tableau en appelant votre rappel. Dans votre cas, le tableau ne contient qu'un seul élément, donc cet élément devient la valeur initiale et également la valeur finale, car il n'y a plus d'éléments à traiter via le rappel.

Jon
la source