使用 Underscore/Lodash 分组和求和 [英] Group By and Sum using Underscore/Lodash

查看:111
本文介绍了使用 Underscore/Lodash 分组和求和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的 JSON:

<预><代码>[{平台ID:1,支出:15,人数:4},{平台ID:1,支出:12,人数:3},{平台ID:2,支出:6,人数:5},{平台ID:2,支出:10,人数:1},]

我想按 platformIdpayoutnumOfPeople 的总和对其进行分组.

即结果我想要这样的 JSON:

<预><代码>[1":{支出:27,人数:7},2":{支出:16,人数:6}]

我尝试使用 underscore.js_.groupBy 方法,它可以很好地分组,但是如何像我演示的那样获取对象属性值的总和以上?

解决方案

你可以不用下划线:

var 结果 = data.reduce(function(acc, x) {var id = acc[x.platformId]如果(身份证){id.payout += x.payoutid.numOfPeople += x.numOfPeople} 别的 {acc[x.platformId] = x删除 x.platformId}返回acc},{})

但是你为什么想要一个带有数字键的对象呢?您可以将其转换回集合:

var toCollection = function(obj) {返回 Object.keys(obj).sort(function(x, y){return +x - +y}).map(function(k){return obj[k]})}toCollection(结果)

注意对象是变异的,所以如果你想维护原始数据,你可以先克隆它们.

I have JSON like this:

[
  {
     platformId: 1,
     payout: 15,
     numOfPeople: 4
  },
  {
     platformId: 1,
     payout: 12,
     numOfPeople: 3

  },
  {
     platformId: 2,
     payout: 6,
     numOfPeople: 5

  },
  {
     platformId: 2,
     payout: 10,
     numOfPeople: 1
  },

]

And I want to Group it by platformId with sum of payout and numOfPeople.

I.e. in result I want JSON like this:

[
  "1": {
     payout: 27,
     numOfPeople: 7
   },

  "2": {
     payout: 16,
     numOfPeople: 6
  }
] 

I tried to use underscore.js's _.groupBy method, and it groups fine, but how I can get the SUM of objects properties values like I demonstrated above?

解决方案

You can do this without Underscore:

var result = data.reduce(function(acc, x) {
  var id = acc[x.platformId]
  if (id) {
    id.payout += x.payout
    id.numOfPeople += x.numOfPeople
  } else {
    acc[x.platformId] = x
    delete x.platformId
  }
  return acc
},{})

But why would you want an object with numeric keys? You could convert it back to a collection:

var toCollection = function(obj) {
  return Object.keys(obj)
    .sort(function(x, y){return +x - +y})
    .map(function(k){return obj[k]})
}

toCollection(result)

Note that objects are mutated, so you may to clone them first if you want to maintain the original data.

这篇关于使用 Underscore/Lodash 分组和求和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆