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?
true, but you haven't specified that that's always the case. Because if that's not the case, then would would you do of an item that is bitter-sweet? Would you put it only in the sweet group? Or only in the bitter group? Or in both groups? Or in neither? Please, explain.