【问题标题】:reduce is not giving right sum减少没有给出正确的总和
【发布时间】:2013-06-15 20:17:03
【问题描述】:

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

我在这里没有做什么?

【问题讨论】:

    标签: javascript lodash


    【解决方案1】:

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

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

    Arrayreduce 的行为方式相同。)

    【讨论】:

    • 这就解释了。谢谢@minitech
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多