【问题标题】:Using lodash groupby when your key is an array of strings当您的键是字符串数组时使用 lodash groupby
【发布时间】:2017-07-21 18:23:14
【问题描述】:

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

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 只是按数组分组,因为它是一个字符串。似乎首先需要一个地图功能。

【问题讨论】:

  • 我格式化了代码,但我没有让它有效。请注意,JS 数组不能有这样的键,您可能需要一个对象字面量。
  • @EmileBergeron 谢谢我编辑。并不意味着将键作为字符串文字。
  • 你没有抓住重点。您正在使用数组 [ ] 表示法创建一个对象字面量,它应该是 { key: value }
  • 再次编辑对不起@EmileBergeron

标签: javascript arrays underscore.js lodash


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-11-23
    • 2013-10-15
    • 2016-06-07
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多