我有以下名为“cars”的数组。我想对数据进行分组,以便具有相似键的对象不会放入组(数组)中。
var 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'
},
];
如何对数据进行分组,以便具有相同品牌的数组对象不会放入同一组中。结果如下所示。
var cars = {
'class_1': [
{ 'make' : 'audi',
'model': 'r8',
'year': '2012'
},{ 'make' : 'ford',
'model': 'mustang',
'year': '2012'
},{
'make': 'kia',
'model': 'optima',
'year': '2012'
}
],
'class_2': [
{
'make' : 'audi',
'model': 'rs5',
'year': '2013'
},{
'make': 'ford',
'model': 'fusion',
'year': '2015'
}
]
}
最佳答案
您可以使用 Array.reduce()
和 helper
数组对项目进行分组。 helper
数组保存每个组中的品牌。对于每个对象,您可以使用Array.findIndex()
来查找不包含make
的组。如果不存在,则创建一个新组,并更新 helper
。
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 helper = [];
const result = cars.reduce((r, o) => {
let i = helper.findIndex((g) => !g[o.make]);
if(i === -1) {
i = helper.push({ [o.make]: true });
r[`class_${i}`] = [o];
} else {
r[`class_${i + 1}`].push(o);
helper[i][o.make] = true;
}
return r;
}, Object.create(null));
console.log(result);
关于javascript - 对数组对象进行分组,使具有相似键的对象不会放入同一组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49883239/