web-dev-qa-db-fra.com

Javascript Réduire un tableau vide

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

87
agusgambina

Le second paramètre correspond à la valeur initiale.

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

ou en utilisant ES6:

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

Les deux comportements sont conformes à la spécification .

Vous ne pouvez pas reduce un tableau vide à moins de fournir explicitement une valeur "accumulée" initiale comme second argument:

Si aucune initialValue n'a été fournie, alors previousValue sera égal à la première valeur du tableau et currentValue sera égal à la seconde. Il s'agit d'une erreur 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, fournir une valeur initiale est facultatif. Cependant, si aucun n'est fourni, le premier élément du tableau est utilisé comme valeur initiale et reduce continue 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, de sorte que cet élément devienne la valeur initiale ainsi que la valeur finale, car il n'y a plus d'éléments à traiter via le rappel.

21
Jon