I have a doubt about grouping in Javascript.
I have an array like the one below, where each item is guaranteed to have only one of is_sweet, is_spicy, or is_bitter equal to true:
const foodsData = [{
name: 'mie aceh',
is_sweet: false,
is_spicy: true,
is_bitter: false,
}, {
name: 'nasi padang',
is_sweet: false,
is_spicy: true,
is_bitter: false,
}, {
name: 'serabi',
is_sweet: true,
is_spicy: false,
is_bitter: false,
}, {
name: 'onde-onde',
is_sweet: true,
is_spicy: false,
is_bitter: false,
}, {
name: 'pare',
is_sweet: false,
is_spicy: false,
is_bitter: true,
}];
The output that I desire is to group an array based on is_sweet for its first element, is_bitter for its second element, and is_spicy for its third_element like the output below:
[
[
{ name: 'serabi',
is_sweet: true,
is_spicy: false,
is_bitter: false },
{ name: 'onde-onde',
is_sweet: true,
is_spicy: false,
is_bitter: false }
],
[
{ name: 'pare',
is_sweet: false,
is_spicy: false,
is_bitter: true }
],
[
{ name: 'mie aceh',
is_sweet: false,
is_spicy: true,
is_bitter: false },
{ name: 'nasi padang',
is_sweet: false,
is_spicy: true,
is_bitter: false }
]
]
I've tried to do this by writing the codes below
const isSweet = foodsData.filter(food => food.is_sweet);
const isBitter = foodsData.filter(food => food.is_bitter);
const isSpicy = foodsData.filter(food => food.is_spicy);
const newFood = [];
newFood.push(isSweet);
newFood.push(isBitter);
newFood.push(isSpicy);
Is there a way to make the same result but with cleaner code either using vanilla Javascript or Lodash?