当你的键是一个字符串数组时使用lodash groupby

时间:2017-07-21 18:23:15

标签: javascript arrays underscore.js lodash

假设我有一个像这样的对象:

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

我想创建一个按年份分组的汽车对象。

所以喜欢..

 var cars = [{
        2012: [
            { make: 'audi', model: 'r8' },
            { make: 'ford', model: 'mustang' },
            { make: 'ford', model: 'fusion' }
        ],
        2013: [{ make: 'audi', model: 'rs5' }, { make: 'ford', model: 'mustang' }]
etc..    
}]

我怎样才能轻松地使用lodash? groupBy只是数组的组,因为它是一个字符串。好像首先需要地图功能。

1 个答案:

答案 0 :(得分:2)

基本上,打开(“线性化”)列表,然后应用groupBy

result = _(cars)
    .flatMap(car => car.year.map(
        year => _.assign({}, car, {year})
    ))
    .groupBy('year')
    .value()

这会保留年份字段,但不知道这是否是一个问题。