2013-06-15 6 views
10

mio oggetto groupBy.Food sembraridurre non sta dando somma giusta

[ 
Object 
amount: "15.0" 
category: Object 
debit: true 
__proto__: Object 
, 
Object 
amount: "10.0" 
category: Object 
debit: true 
__proto__: Object 
, 
Object 
amount: "11.1" 
category: Object 
debit: true 
__proto__: Object 
] 

Tutto quello che voglio è sum di importo in ogni oggetto. Sto usando Lodash reduce come

var s = _.reduce(groupBy.Food, function(s, entry){ 
    return s + parseFloat(entry.amount); 
}); 

Quando vedo valore della s ottengo

s 
"[object Object]1011.1" 

cosa è che io sono, non facendo qui?

risposta

23

Per impostazione predefinita, reduce inizia con i primi due elementi della lista, in modo s sarà il primo elemento dell'array e entry sarà la seconda voce per la prima volta la funzione viene chiamata. Dategli un valore di partenza: (. ‘S reduceArray si comporta allo stesso modo)

var s = _.reduce(groupBy.Food, function(s, entry) { 
    return s + parseFloat(entry.amount); 
}, 0);

+0

Questo lo spiega. Grazie @minitech – daydreamer

5

È anche possibile utilizzare _.sum(array) o _.sumBy(array, [iteratee=_.identity]) per riassumere sia per array e oggetti. Vedi sotto esempi.

_.sum([4, 2, 8, 6]); // ➜ 20 

var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; 
_.sumBy(objects, function(o) { return o.n; }); // ➜ 20 
_.sumBy(objects, 'n');// ➜ 20