问题描述
蒂莫的回答是我会怎么做。简单_.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'
}
]
}