减少不给予正确的金额

时间:2013-06-15 20:17:04

标签: javascript lodash

我的对象groupBy.Food看起来像

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

我想要的只是每个对象中sum的金额。我使用Lodash reduce作为

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

当我看到s的价值时,我得到

s
"[object Object]1011.1"

我在这里做的不是什么?

2 个答案:

答案 0 :(得分:24)

默认情况下,reduce从列表中的前两项开始,因此s将是数组中的第一项,entry将是第一项的第二项你的函数被调用。给它一个值开头:

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

Array reduce的行为方式相同。)

答案 1 :(得分:6)

您还可以使用_.sum(array)_.sumBy(array, [iteratee=_.identity])来汇总数组和对象。见下面的例子。

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