Sort array by specific order

Viewed 72

I have an array

peeps = [{name: "Mike", age: 31},{name: "Dave", age: 31},{name: "Delta", age: 31},{name: "Clint", age: 31}] 

And I need to sort them by an arbitrary order of

newOrder = ['Delta', 'Dave', 'Mike', 'Clint']

How would I reference newOrder to sort peeps, also bear in mind the data in peeps is not guaranteed to have all the names in newOrder

2 Answers

const peeps = [
  { name: 'Mike', age: 31 },
  { name: 'Dave', age: 31 },
  { name: 'Delta', age: 31 },
  { name: 'Clint', age: 31 }
];
const newOrder = ['Delta', 'Dave', 'Mike', 'Clint'];

peeps.sort((a, b) => newOrder.indexOf(a.name) - newOrder.indexOf(b.name));

console.log(peeps);

This is one way:

const peeps = [{name: "Mike", age: 31},{name: "Dave", age: 31},{name: "Delta", age: 31},{name: "Clint", age: 31}];
const newOrder = ['Delta', 'Dave', 'Mike', 'Clint'];

const notInNewOrder = peeps.filter(i => !newOrder.includes(i.name));

const response = newOrder.map(n => ({...peeps.find(peep=> peep.name === n)}));

console.log(response.concat(notInNewOrder));

Related