Pregunta

Estoy usando Firefox 3.5.7 y dentro de Firebug que estoy tratando de probar la función array.reduceRight, funciona para matrices simples pero cuando intento algo así consigo un NaN . ¿Por qué?

>>> 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

También trató mapa y al menos puedo ver el componente .score de cada elemento:

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

He leído la documentación en https: //developer.mozilla. org / es / Core_JavaScript_1.5_Reference / Objetos / array / reduceRight pero al parecer no puedo conseguir que funcione para resumir toda la score los valores en mi detalles formación. ¿Por qué?

¿Fue útil?

Solución

El primer argumento dado a la función es el valor acumulado. Así que la primera llamada a la función se verá como f(0, {score: 1}). Así que cuando se hace x.score, en realidad estás haciendo 0.score que no funciona, por supuesto. En otras palabras, usted quiere x + y.score.

Otros consejos

probar este (se convertirá en números como efecto secundario)

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

o este

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

Gracias a @ sepp2k para señalar cómo se necesitaba { 'score' : 0 } como parámetro.

El reducen la función debe combinar dos objetos con una "puntuación" propiedad en un nuevo objeto con una propiedad "puntuación". Los estás combinando en un número.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top