2013-06-15 5 views
10
somme

Mon objet groupBy.Food ressemblepermettent de réduire ne donne pas droit

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

Tout ce que je veux est sum de quantité dans chaque objet. J'utilise Lodash reduce comme

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

Quand je vois la valeur de s je reçois

s 
"[object Object]1011.1" 

Qu'est-ce que je ne fais pas ici?

Répondre

23

Par défaut, reduce commence avec les deux premiers éléments de la liste, donc s sera le premier élément du tableau et entry sera le deuxième point la première fois que votre fonction est appelée. Donnez-lui une valeur de commencer par: (. De reduceArray se comporte de la même manière)

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

+0

Ceci l'explique. Merci @minitech – daydreamer

5

Vous pouvez également utiliser _.sum(array) ou _.sumBy(array, [iteratee=_.identity]) pour sommer pour les deux tableaux et d'objets. Voir ci-dessous des exemples.

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