2013-06-15 17 views
10

mojego obiektu groupBy.Food wyglądazmniejszyć nie jest uprawniających suma

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

Wszystko czego chcę to sum kwoty w każdym obiekcie. Używam Lodash reduce jak

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

Kiedy widzę wartość s uzyskać

s 
"[object Object]1011.1" 

Co to jest, że mam nie robić tutaj?

Odpowiedz

23

Domyślnie reduce rozpoczyna się od pierwszych dwóch pozycji na liście, więc s będzie pierwszym elementem w tablicy, a entry będzie drugim elementem przy pierwszym wywołaniu funkcji. Nadać jej wartość na początek: (. Array „s reduce zachowuje się w ten sam sposób)

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

+0

To wyjaśnia. Dziękuję @minitech – daydreamer

5

Można również użyć _.sum(array) lub _.sumBy(array, [iteratee=_.identity]) dla podsumowując zarówno do tablicy i obiektu. Zobacz poniższe przykłady.

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