如何按键对复杂对象数组进行分组



这是类似的问题,我怎么能组一个数组的复杂对象的关键,但我的数据是复杂的,提供的解决方案没有工作。

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"
//         }
//     ]
// }

最新更新