javascript - 如何使用_.reduce或原生reduce对对象进行求和和排序?

标签 javascript mapreduce underscore.js reduce

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

[{ 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}]

解决这个问题的最佳方法是什么?

最佳答案

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

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()

关于javascript - 如何使用_.reduce或原生reduce对对象进行求和和排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21582101/

相关文章:

javascript - 什么是 JSON VM747 :1 error that happens during JSON parsing?

javascript - Mongodb 和 MapReduce - 结果丢失

hadoop - 如何为 YARN MapReduce 作业处理容器故障?

javascript - 将 Backbone.js JSON 响应填充到嵌套集合/模型内的嵌套集合中

javascript - 使用 Backbone 调用下划线模板内的函数

javascript - 为什么 v-for 在这个 VueJS todo 应用程序中不起作用?

javascript - 获取请求不起作用

javascript - HTML 表格外边框多个 TR

hadoop - 应该从 Hadoop 中的哪个类继承(或扩展)Combiner?

javascript - Linq.js 对 Json 数据的功能不起作用