How to group an array of objects by key

后端 未结 24 3013
后悔当初
后悔当初 2020-11-21 05:13

Does anyone know of a (lodash if possible too) way to group an array of objects by an object key then create a new array of objects based on the grouping? For example, I hav

24条回答
  •  故里飘歌
    2020-11-21 05:51

    Timo's answer is how I would do it. Simple _.groupBy, and allow some duplications in the objects in the grouped structure.

    However the OP also asked for the duplicate make keys to be removed. If you wanted to go all the way:

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

    Yields:

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

    If you wanted to do this using Underscore.js, note that its version of _.mapValues is called _.mapObject.

提交回复
热议问题