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

问题描述

蒂莫的回答是我会怎么做。简单_.groupBy,并且允许在分组结构中的对象中有一些重复。

如果需要,从对象中删除您分组的属性应该是微不足道的:

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'
}];

const grouped = _.groupBy(cars, car => car.make);

console.log(grouped);
<script src='https://cdn.jsdelivr.net/lodash/4.17.2/lodash.min.js'></script>

但是,OP 还要求删除重复的make密钥。如果你想一路走下去:

var grouped = _.mapValues(_.groupBy(cars, 'make'),
                          clist => clist.map(car => _.omit(car, 'make')));

console.log(grouped);

产量:

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

如果您想使用 Underscore.js 执行此操作,请注意其版本_.mapValues名为_.mapObject.

解决方法

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

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

我想创建一个新的汽车对象数组,这些对象按以下方式分组make

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