Question

J'utilise Firefox 3.5.7 et dans Firebug Je suis en train de tester la fonction array.reduceRight, cela fonctionne pour tableaux simples mais lorsque je tente quelque chose comme ça, je reçois un NaN . Pourquoi?

>>> var details = [{score : 1}, {score: 2}, {score: 3}];
>>> details
[Object score=1, Object score=2, Object score=3]
>>> details.reduceRight(function(x, y) {return x.score + y.score;}, 0)
NaN

J'ai aussi essayé la carte et au moins je peux voir la composante .score de chaque élément:

>>> details.map(function(x) {console.log (x.score);})
1
2
3
[undefined, undefined, undefined]

Je lis la documentation https: //developer.mozilla. org / fr / Core_JavaScript_1.5_Reference / objets / Array / reduceRight mais apparemment je ne peux pas le faire fonctionner pour résumer tous les score valeurs dans mes détails tableau. Pourquoi?

Était-ce utile?

La solution

Le premier argument donné à la fonction est la valeur accumulée. Ainsi, le premier appel à la fonction ressemblera f(0, {score: 1}). Donc, lorsque vous faites x.score, vous faites réellement 0.score qui ne fonctionne pas bien sûr. En d'autres termes, vous voulez x + y.score.

Autres conseils

essayer (se convertir en nombres comme effet secondaire)

details.reduceRight(function(previousValue, currentValue, index, array) {
  return previousValue + currentValue.score;
}, 0)

ou ce

details.reduceRight(function(previousValue, currentValue, index, array) {
  var ret = { 'score' : previousValue.score + currentValue.score} ;
  return ret;
}, { 'score' : 0 })

Merci à @ sepp2k pour pointer comment { 'score' : 0 } était nécessaire comme paramètre.

La diminution de la fonction doit combiner deux objets avec une propriété « score » dans un nouvel objet avec une propriété « score ». Vous les associez en nombre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top