我有这样的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
与和payout
和numOfPeople
。
即结果我想要这样的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] 删除。
我来说两句