3 回答
TA贡献1820条经验 获得超9个赞
您可以通过使用对象存储属于每个类别的元素来减少数组来对元素进行分组。要获得分组的类别,我们可以使用Object.values.
let products = [{name: 'Tequila', category: 'drink'},
{name: 'Beer', category: 'drink'},
{name: 'Burger', category: 'food'},
{name: 'Shawarma', category: 'food'},
{name: 'Wine', category: 'drink'},
{name: 'Gelatto', category: 'dessert'}];
const res = Object.values(
products.reduce((acc,curr)=>(
(acc[curr.category] = acc[curr.category] || []).push(curr), acc
), {})
);
console.log(res);
TA贡献1860条经验 获得超8个赞
试试这个。我正在使用Array.prototype.reduce()按类别键对数组中的对象进行分组,然后您可以获得所需的数据Object.values()
let products = [{
name: 'Tequila',
category: 'drink'
},
{
name: 'Beer',
category: 'drink'
},
{
name: 'Burger',
category: 'food'
},
{
name: 'Shawarma',
category: 'food'
},
{
name: 'Wine',
category: 'drink'
},
{
name: 'Gelatto',
category: 'dessert'
}
];
let group = products.reduce((r, a) => {
r[a.category] = [...r[a.category] || [], a];
return r;
}, {});
console.log(Object.values(group));
TA贡献2016条经验 获得超9个赞
我使用 reducer 遍历数组。为了构建组,我使用存储类别的索引数组。在添加新项目之前,我会查看此数组中是否存在该类别。如果是这样,我获取索引并将该项目添加到该索引组。否则,我会创建一个新的组数组来添加该项目。
let products = [{name: 'Tequila', category: 'drink'},
{name: 'Beer', category: 'drink'},
{name: 'Burger', category: 'food'},
{name: 'Shawarma', category: 'food'},
{name: 'Wine', category: 'drink'},
{name: 'Gelatto', category: 'dessert'}];
let categories=[];
let res = products.reduce((new_object, current_item) => {
index = categories.indexOf(current_item.category);
if (index==-1) {
categories.push(current_item.category)
new_object.push([current_item]);
} else {
new_object[index].push(current_item);
}
return new_object;
}, []);
console.log(res);
添加回答
举报