Après la première itération votre êtes de retour d'un nombre et d'essayer d'en obtenir la propriété x
à ajouter à l'objet suivant qui est - undefined
- mathématiques impliquant undefined
résultats en NaN
.
essayer de retourner un objet contient un x
de la propriété avec la somme des x propriétés de paramètres:
var arr = [{x:1},{x:2},{x:4}];
arr.reduce(function (a, b) {
return {x: a.x + b.x}; // returns object with property x
})
Explication ajouté des commentaires:
La valeur de retour de chaque itération de l' [].reduce
utilisé comme l' a
variable dans la prochaine itération.
Itération 1: a = {x:1}
, b = {x:2}
, {x: 3}
attribué a
dans l'Itération 2
Itération 2: a = {x:3}
, b = {x:4}
.
Le problème avec votre exemple est que vous êtes de retour d'un nombre littéral.
function (a, b) {
return a.x + b.x; // returns number literal
}
Itération 1: a = {x:1}
, b = {x:2}
, // returns 3
comme a
dans la prochaine itération
Itération 2: a = 3
, b = {x:2}
retours NaN
Un nombre littéral 3
n'est pas (en général) ont une propriété appelée x
donc undefined
et undefined + b.x
retours NaN
et NaN + <anything>
toujours NaN