Reputation: 4895
I need to sort my list
using the selected
array.
const list = [
{ name: 'BMW' },
{ name: 'AUDI' },
{ name: 'MINI' },
{ name: 'FIAT' },
{ name: 'KIA' },
]
const selected = [ 'MINI', 'KIA' ]
What is the best way to do this? I have found some examples but not too sure how to adapt this to work the way I want it to!
list.sort((a,b) => (a.last_nom > b.last_nom) ? 1 : ((b.last_nom > a.last_nom) ? -1 : 0))
const list = [
{ name: 'MINI' },
{ name: 'KIA' },
{ name: 'BMW' },
{ name: 'AUDI' },
{ name: 'FIAT' },
]
Upvotes: 1
Views: 73
Reputation: 31835
You could use Array.prototype.includes
and take advantage of JavaScript's numbers coercion like this:
const list = [
{ name: "BMW" },
{ name: "AUDI" },
{ name: "MINI" },
{ name: "FIAT" },
{ name: "KIA" },
];
const selected = ["MINI", "KIA"];
const sorted = list.sort(
(a, b) => selected.includes(b.name) - selected.includes(a.name)
);
console.log(sorted);
If the order of the elements has to remain the same and be consistent across browsers:
const list = [
{ name: "BMW" },
{ name: "AUDI" },
{ name: "MINI" },
{ name: "FIAT" },
{ name: "KIA" },
];
const selected = ["MINI", "KIA"];
const sorted = list.sort(
(a, b) =>
selected.includes(b.name) - selected.includes(a.name) ||
list.indexOf(a) - list.indexOf(b)
);
console.log(sorted);
Upvotes: 1