Perché il reduceRight tornare NaN in Javascript?
-
22-09-2019 - |
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é?
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.