这是类似的问题,我怎么能组一个数组的复杂对象的关键,但我的数据是复杂的,提供的解决方案没有工作。
const cars = [
{
'make': 'audi',
'model': ['r8','r9'],
'year': '2012'
}, {
'make': 'audi',
'model': ['r8','r9'],
'year': '2013'
}, {
'make': 'ford',
'model': ['mustang','mustang lx'],
'year': '2012'
}, {
'make': 'ford',
'model': ['mustang','mustang lp'],
'year': '2015'
}, {
'make': 'kia',
'model': 'optima',
'year': '2012'
},
];
我想创建一个新的汽车对象数组,按make:
分组{
'audi': [
{
'make': 'audi',
'model': ['r8','r9'],
'year': '2012'
}, {
'make': 'audi',
'model': ['r8','r9'],
'year': '2013'
}
],
'ford': [
{
'make': 'ford',
'model': ['mustang','mustang lx'],
'year': '2012'
}, {
'make': 'ford',
'model': ['mustang','mustang lp'],
'year': '2015'
}
],
'kia': [
{
'make': 'kia',
'model': 'optima',
'year': '2012'
}
]
}
我试着
for (let { domain, ...fields } of items) {
result[domain] = result[domain] || [];
result[domain].push({ ...fields });
}
和
result = items.reduce(function (r, a) {
r[a.domain] = r[a.domain] || [];
r[a.domain].push(a);
return r;
}, Object.create(null));
输出为
{
'audi': [
{
'make': 'audi',
'model': [Array],
'year': '2012'
}, {
'make': 'audi',
'model': [Array],
'year': '2013'
}
],
'ford': [
{
'make': 'ford',
'model': [Array],
'year': '2012'
}, {
'make': 'ford',
'model': [Array],
'year': '2015'
}
],
'kia': [
{
'make': 'kia',
'model': 'optima',
'year': '2012'
}
]
}
你可以试试:
let groupBy = (arr, key) => {
return arr.reduce((rv, x) => {
(rv[x[key]] = rv[x[key]] || []).push(x);
return rv;
}, {});
};
let res = groupBy(cars, 'make');
console.log(res);
// Output :
// {
// "audi": [
// {
// "make": "audi",
// "model": [
// "r8",
// "r9"
// ],
// "year": "2012"
// },
// {
// "make": "audi",
// "model": [
// "r8",
// "r9"
// ],
// "year": "2013"
// }
// ],
// "ford": [
// {
// "make": "ford",
// "model": [
// "mustang",
// "mustang lx"
// ],
// "year": "2012"
// },
// {
// "make": "ford",
// "model": [
// "mustang",
// "mustang lp"
// ],
// "year": "2015"
// }
// ],
// "kia": [
// {
// "make": "kia",
// "model": "optima",
// "year": "2012"
// }
// ]
// }