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 correspond à 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 à 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.