2013-06-15 6 views
10

Mein Objekt groupBy.Food sieht aus wiereduce gibt nicht richtig Summe

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

Alles, was ich will sum der Menge in jedem Objekt ist. Ich verwende Lodash reduce als

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

Wenn ich Wert von s sehe ich

s 
"[object Object]1011.1" 
bekommen

Was ist, dass ich nicht richtig hier?

Antwort

23

startet standardmäßig reduce heraus mit den ersten beiden Elementen in der Liste, so wird s sein das erste Element in dem Array und entry wird das zweite Element das erste Mal Ihrer Funktion aufgerufen wird. Geben Sie ihm einen Wert zu beginnen: (. Array ‚s reduce die gleiche Art und Weise verhält)

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

+0

Dies erklärt es. Danke @minitech – daydreamer

5

Sie auch _.sum(array) oder _.sumBy(array, [iteratee=_.identity]) zum Aufsummieren für beide Array und Objekt verwenden können. Siehe die folgenden Beispiele.

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