Javascript 带子数组的组数组
我试图找到一种最简单的方法来获取一个具有相似信息的数组,并使用子数组创建一个数组。新创建的父数组还应与子数组中的值求和。这相当于使用sum/group by的SQL语句 这是原始数组Javascript 带子数组的组数组,javascript,arrays,underscore.js,lodash,Javascript,Arrays,Underscore.js,Lodash,我试图找到一种最简单的方法来获取一个具有相似信息的数组,并使用子数组创建一个数组。新创建的父数组还应与子数组中的值求和。这相当于使用sum/group by的SQL语句 这是原始数组 [ { 'userId':1, 'userName':'bob', 'category':'shoes', 'count':2 }, { 'userId':1, 'userName':'bob',
[
{
'userId':1,
'userName':'bob',
'category':'shoes',
'count':2
},
{
'userId':1,
'userName':'bob',
'category':'rocks',
'count':4
},
{
'userId':1,
'userName':'bob',
'category':'bags',
'count':3
},
{
'userId':2,
'userName':'sue',
'category':'shoes',
'count':1
},
{
'userId':2,
'userName':'sue',
'category':'rocks',
'count':7
},
{
'userId':2,
'userName':'sue',
'category':'bags',
'count':4
},
]
这就是我希望新创建的阵列的外观:
[
{
'userId':1,
'userName':'bob',
'purchases': [
{'category':'shoes','count':'2'},
{'category':'rocks','count':'4'},
{'category':'bags','count':'3'}
],
'totalCount' : 9
},
{
'userId':2,
'userName':'sue',
'purchases': [
{'category':'shoes','count':'1'},
{'category':'rocks','count':'7'},
{'category':'bags','count':'4'}
],
'totalCount' : 12
},
]
首先是用户ID,然后是获得所需结构的组:
var groups = _.groupBy(list, 'userId');
var result = _.map(groups, function(user){
return {
userId: user[0].userId,
userName: user[0].userName,
purchases: _.map(user, function(purchase){
return {
category: purchase.category,
count: purchase.count
}
}),
totalCount: _.reduce(user, function(memo, purchase){
return memo + purchase.count;
}, 0)
}
});
您可以使用JavaScript SQL库执行此操作:
这是一个例子:
var res = alasql('SELECT userId, FIRST(userName) as userName, \
ARRAY({category:category,[count]:[count]}) AS purchases,\
SUM([count]) AS totalCount FROM ? GROUP BY userId',[data]);
试试这个例子。将速度与Lodash溶液进行比较
评论: