我的对象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"
我在这里做的不是什么?
答案 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