Domanda

sto usando Firefox 3.5.7 e all'interno di Firebug sto cercando di testare la funzione array.reduceRight, funziona per semplici array , ma quando provo qualcosa di simile che ho un NaN . Perché?

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

Ho anche provato mappa e almeno riesco a vedere la componente .score di ogni elemento:

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

Ho letto la documentazione all'indirizzo https: //developer.mozilla. org / it / Core_JavaScript_1.5_Reference / oggetti / Array / reduceRight ma a quanto pare non riesco a farlo funzionare per riassumere tutte le punteggio i valori nei miei informazioni Vettore. Perché?

È stato utile?

Soluzione

Il primo argomento data alla funzione è il valore accumulato. Quindi la prima chiamata alla funzione sarà simile f(0, {score: 1}). Così, quando si fa x.score, si sta effettivamente facendo 0.score che non funziona ovviamente. In altre parole si vuole x + y.score.

Altri suggerimenti

provare questo (convertirà in numeri come effetto collaterale)

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

o del presente

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

Grazie a @ sepp2k per sottolineare come { 'score' : 0 } era necessario come parametro.

La funzione di riduzione dovrebbe combinare due oggetti con una proprietà "punteggio" in un nuovo oggetto con una proprietà "punteggio". Stai li unisce in un numero.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top