Уменьшить не дает правильную сумму
Мой объект 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 уменьшить как
var s = _.reduce(groupBy.Food, function(s, entry){
return s + parseFloat(entry.amount);
});
Когда я вижу значение s
, я получаю
s
"[object Object]1011.1"
Что я здесь не делаю?
Ответы
Ответ 1
По умолчанию reduce
начинается с первых двух элементов в списке, поэтому s
будет первым элементом в массиве и entry
будет вторым элементом при первом вызове функции. Дайте ему значение для начала:
var s = _.reduce(groupBy.Food, function(s, entry) {
return s + parseFloat(entry.amount);
}, 0);
(Array
s reduce
ведет себя одинаково).
Ответ 2
Вы также можете использовать _.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