I have an array of js object
const name = 'Levi'
var data = [
{ firstname: 'Levi', food: 'apple' },
{ firstname: 'Eren', food: 'orange' },
{ firstname: 'Levi', food: 'grapes' },
{ firstname: 'Miks', food: 'banana' }
];
How can I sort the firstname and prioritized (Levi) as on top.
Expected Output:
[{firstname: Levi, food: apple},
{ firstname: Levi, food: grapes },
{ firstname: Eren, food: orange },
{ firstname: Miks, food: banana}]
I used this code
this.data.sort((a, b) => (a.firstname > name) ? 1 : ((name> a.firstname) ? -1 : 0));
wentjun
42.9k10 gold badges108 silver badges116 bronze badges
asked Jan 31, 2020 at 3:42
aJaysanity
1651 gold badge5 silver badges14 bronze badges
2 Answers 2
The first check both a and b firstname are name or not, if true, do nothing.
Next, check a firstname or b firstname is name, if true, find who has firstname is name, and swap a and b or not.
Finally, check with alphabetical order rule.
const name = 'Levi'
var data = [
{ firstname: 'Levi', food: 'apple' },
{ firstname: 'Eren', food: 'orange' },
{ firstname: 'Levi', food: 'grapes' },
{ firstname: 'Miks', food: 'banana' },
{ firstname: 'AMiks', food: 'mango' }
];
const sorted = data.sort((a, b) => {
if (a.firstname === name && b.firstname === name) {
return 0;
}
if (a.firstname === name || b.firstname === name) {
return a.firstname === name ? -1 : 1;
}
return a.firstname.localeCompare(b.firstname);
});
console.log(sorted);
Output:
[ { firstname: 'Levi', food: 'apple' },
{ firstname: 'Levi', food: 'grapes' },
{ firstname: 'AMiks', food: 'banana' },
{ firstname: 'Eren', food: 'orange' },
{ firstname: 'Miks', food: 'banana' } ]
answered Jan 31, 2020 at 4:05
hoangdv
16.3k4 gold badges31 silver badges54 bronze badges
Sign up to request clarification or add additional context in comments.
Comments
If a and b firstnames are equal to name, then sort on their food. If a firstname is name, then prioritize.
const name = "Levi";
var data = [
{ firstname: "Levi", food: "apple" },
{ firstname: "Eren", food: "orange" },
{ firstname: "Levi", food: "grapes" },
{ firstname: "Miks", food: "banana" }
];
const sortAsc = (a, b) => {
if (b > a) {
return -1;
}
if (a > b) {
return 1;
}
return 0;
};
data.sort((a, b) => {
if (a.firstname === name && b.firstname === name) {
return sortAsc(a.food, b.food);;
}
if (a.firstname === name) {
return -1;
}
});
console.log(data);
answered Jan 31, 2020 at 4:17
Siva Kondapi Venkata
11.1k2 gold badges20 silver badges32 bronze badges
Comments
lang-js
this.data.sort((a, b) => (a.firstname === name) ? -1 : (b.firstname === name) ? 1 : a.firstname.localeCompare(b.firstname));