代码之家  ›  专栏  ›  技术社区  ›  Zeeps Wear

如何按键对对象进行分组?

  •  0
  • Zeeps Wear  · 技术社区  · 2 年前

    是否有人知道一种方法(如果可能的话,也可以使用lodash)通过对象键对对象数组进行分组,然后根据分组创建一个新的对象数组?例如,我有一组汽车对象:

    const cars = [
        {
            'make': 'audi',
            'model': 'r8',
            'year': '2012'
        }, {
            'make': 'audi',
            'model': 'rs5',
            'year': '2013'
        }, {
            'make': 'ford',
            'model': 'mustang',
            'year': '2012'
        }, {
            'make': 'ford',
            'model': 'fusion',
            'year': '2015'
        }, {
            'make': 'kia',
            'model': 'optima',
            'year': '2012'
        },
    ];
    

    我想创建一个新的汽车对象数组,按 make :

    const cars = {
        'audi': [
            {
                'model': 'r8',
                'year': '2012'
            }, {
                'model': 'rs5',
                'year': '2013'
            },
        ],
    
        'ford': [
            {
                'model': 'mustang',
                'year': '2012'
            }, {
                'model': 'fusion',
                'year': '2015'
            }
        ],
    
        'kia': [
            {
                'model': 'optima',
                'year': '2012'
            }
        ]
    }
    
    0 回复  |  直到 3 年前
        1
  •  0
  •   Nathan F.    2 年前

    在纯Javascript中,可以使用 Array#reduce 用一个物体

    var cars = [{ make: 'audi', model: 'r8', year: '2012' }, { make: 'audi', model: 'rs5', year: '2013' }, { make: 'ford', model: 'mustang', year: '2012' }, { make: 'ford', model: 'fusion', year: '2015' }, { make: 'kia', model: 'optima', year: '2012' }],
        result = cars.reduce(function (r, a) {
            r[a.make] = r[a.make] || [];
            r[a.make].push(a);
            return r;
        }, Object.create(null));
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }