javascript - 带子数组的组数组

标签 javascript arrays underscore.js lodash

我正在尝试找到最简单的方法来获取具有类似信息的数组并创建带有子数组的数组。新创建的父数组还应该对子数组中找到的值求和。这相当于使用 sum/group by 的 SQL 语句。

这是原始数组

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

最佳答案

第一groupBy userId 然后 map组以获得所需的结构:

    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 - 带子数组的组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25676026/

相关文章:

javascript - obj.length 什么时候不等于+obj.length?

javascript - 显示用户输入的图像数量? JavaScript

javascript - useState 中没有 () 的函数( react 钩子(Hook))

java - Arrays.copyOfRange() 的运行时

c++ - 带指针的基于范围的循环

javascript - 下划线 .reduce() 返回 NaN?

javascript - $lookup结果显示[object Object]

javascript - axios 和 Express 路由器没有预期错误

java - 脏话测试未按预期工作(在聊天应用程序中)?

javascript - 在下划线 groupBy 之后加入或合并 json 对象