使用Underscore / Lodash分组和求和

我的标题

我有这样的JSON:

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

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

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

]

我想这组通过platformId与和payoutnumOfPeople

即结果我想要这样的JSON:

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

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

我尝试使用underscore.js_.groupBy方法,并且它可以很好地分组,但是如何获得如上所示的对象属性值的SUM?

氏族

您可以在没有下划线的情况下执行此操作:

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
},{})

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

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

toCollection(result)

请注意,对象是突变的,因此,如果要保留原始数据,可以先克隆它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章