I have an array of objects like this:
// dishes: [
{category: 'LEGUME', description: 'A'},
{category: 'VEGETABLE', description: 'N'},
{category: 'VEGETABLE', description: 'B'},
{category: 'VEGETABLE', description: 'A'},
{category: 'FISH', description: 'C'},
{category: 'LEGUME', description: 'E'},
{category: 'LEGUME', description: 'B'},
{category: 'LEGUME', description: 'N'},
]
I'm sorting this array with this function:
const dishes = dishes.sort((a, b) => {
if (a.category > b.category) return -1;
if (a.category < b.category) return 1;
return a.description.localeCompare(b.description);
});
The output from above is like this:
// dishes: [
{category: 'LEGUME', description: 'A'},
{category: 'LEGUME', description: 'B'},
{category: 'LEGUME', description: 'E'},
{category: 'LEGUME', description: 'N'},
{category: 'VEGETABLE', description: 'A'},
{category: 'VEGETABLE', description: 'B'},
{category: 'VEGETABLE', description: 'N'},
{category: 'FISH', description: 'C'},
]
But now I want to force one of the categories to be the first one, let's say VEGETABLE, so the output should be:
// dishes: [
{category: 'VEGETABLE', description: 'A'},
{category: 'VEGETABLE', description: 'B'},
{category: 'VEGETABLE', description: 'N'},
{category: 'LEGUME', description: 'A'},
{category: 'LEGUME', description: 'B'},
{category: 'LEGUME', description: 'E'},
{category: 'LEGUME', description: 'N'},
{category: 'FISH', description: 'C'},
]
I've tried a bunch of solutions from other questions but none worked, any suggestions? is it possible?
Thanks in advance.
[UPDATED]: my final solution, thanks to @Andrew Parks:
dishes.sort((a, b) =>
+(b.category === "VEGETABLE") -
+(a.category === "VEGETABLE") ||
a.category.localeCompare(b.category) ||
a.description.localeCompare(b.description)
);