3 回答

TA貢獻1820條經(jīng)驗 獲得超9個贊
您可以通過使用對象存儲屬于每個類別的元素來減少數(shù)組來對元素進行分組。要獲得分組的類別,我們可以使用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條經(jīng)驗 獲得超8個贊
試試這個。我正在使用Array.prototype.reduce()按類別鍵對數(shù)組中的對象進行分組,然后您可以獲得所需的數(shù)據(jù)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條經(jīng)驗 獲得超9個贊
我使用 reducer 遍歷數(shù)組。為了構(gòu)建組,我使用存儲類別的索引數(shù)組。在添加新項目之前,我會查看此數(shù)組中是否存在該類別。如果是這樣,我獲取索引并將該項目添加到該索引組。否則,我會創(chuàng)建一個新的組數(shù)組來添加該項目。
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);
添加回答
舉報