【问题标题】:How to use _.reduce or native reduce to sum and rank objects?如何使用 _.reduce 或原生 reduce 对对象进行求和和排序?
【发布时间】:2014-02-05 16:00:08
【问题描述】:

似乎 _.reduce(或等效的本地函数)的示例非常简单。有人可以提供一个使用此函数对对象数组进行求和然后排序/排序的示例吗?例如,如果我的数组包含 --

[{ name: 'John', store: 23,  revenue: 300.00 }, 
{ name: 'John', store: 23,  revenue: 600.00 },
{ name: 'Kerry', store: 23,  revenue: 100.00 },
{ name: 'Kerry', store: 23,  revenue: 200.00 },
{ name: 'Lars', store: 24,  revenue: 600.00 },
{ name: 'Lars', store: 24,  revenue: 800.00 },
{ name: 'Lars', store: 24,  revenue: 1000.00 },
{ name: 'Indira', store: 24,  revenue: 1800.00 },
{ name: 'Indira', store: 24,  revenue: 2800.00 },
{ name: 'Indira', store: 24,  revenue: 3800.00 },
{ name: 'Jacinta', store: 24,  revenue: 300.00 }]

我希望输出如下:

[{store: 23, rank: 1, name: 'John', revenue: 900.00},
{store: 23, rank: 2, name: 'Kerry', revenue: 300.00},
{store: 24, rank: 1, name: 'Indira', revenue: 8400.00},
{store: 24, rank: 2, name: 'Lars', revenue: 2400.00},
{store: 24, rank: 3, name: 'Jacinta', revenue: 300.00}]

最好的方法是什么?

【问题讨论】:

    标签: javascript mapreduce underscore.js reduce


    【解决方案1】:

    这个小怪物似乎完成了这项工作:

    result = _(data).chain().groupBy('name').map(function(g) {
        return {
            name:g[0].name,
            store:g[0].store,
            revenue: _.reduce(g, function(a, b) { return a + b.revenue}, 0)
        }
    }).sortBy('revenue').reverse().groupBy('store').map(function(g) {
        return _(g).chain().map(function(x, n) {
            return x.rank = n + 1, x;
        }).value()
    }).values().flatten().value()
    

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      • 2022-10-13
      • 1970-01-01
      • 2012-12-31
      相关资源
      最近更新 更多