12

我的对象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"

我在这里没有做什么?

4

2 回答 2

25

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

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

(Arrayreduce行为方式相同。)

于 2013-06-15T20:18:55.430 回答
7

您还可以使用_.sum(array)or_.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
于 2016-08-23T13:17:22.200 回答