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
Le second paramètre concerne la valeur initiale.
[].reduce(function(previousValue, currentValue){ return Number(previousValue) + Number(currentValue); }, 0);
ou en utilisant ES6:
[].reduce( (previousValue, currentValue) => previousValue + currentValue, 0);
Les deux comportements sont conformes aux spécifications .
Vous ne pouvez pas reduce
un tableau vide à moins que vous ne fournissiez explicitement une valeur initiale “accumulée” comme second argument:
Si initialValue n’a pas été fourni, alors previousValue sera égal à la première valeur du tableau et currentValue sera égal à la seconde. C’est un 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. Toutefois, si aucun n’est fourni, le premier élément du tableau est utilisé en tant que valeur initiale et la reduce
continue à traiter le rest 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 devient la valeur initiale et également la valeur finale, car il n’y a plus d’éléments à traiter dans le rappel.