Сортировать по
indexOf( ID )
в массиве, задающем порядок сортировки:
var data = [
{ID: 1, country: 'England'},
{ID: 4, country: 'USA'},
{ID: 9, country: 'Russia'},
{ID: 5, country: 'Germany'},
{ID: 6, country: 'France'},
];
const order = [5,1,9,6,4];
data.sort((a,b) => order.indexOf(a.ID) - order.indexOf(b.ID));
/* [
{"ID":5,"country":"Germany"},
{"ID":1,"country":"England"},
{"ID":9,"country":"Russia"},
{"ID":6,"country":"France"},
{"ID":4,"country":"USA"}]
*/
На больших массивах для ускорения:
- добавить в исходный массив новое поле с порядковым номером, который каждый элемент должен занять после сортировки;
- отсортировать по этому полю.
Так будет быстрее, чем на каждой операции сравнения двух элементов искать их индексы во втором массиве.
data = data.map( e => {e.sortBy = order.indexOf(e.ID); return e;} );
data.sort( (a,b) => a.sortBy - b.sortBy);