Сортировка массива коллекций в нужном порядке JS

Ребята всем привет, я нид хелп, как проще всего отсортировать в таком порядке как мне нужно? Например есть массив коллекций

const users = [
  { name: 'Mango', daysActive: 15 },
  { name: 'Poly', daysActive: 4 },
  { name: 'Ajax', daysActive: 27 },
  { name: 'Chelsey', daysActive: 2 },
];

Мне нужно сделать сортировку по имени например так:

const usersSort = [
 { name: 'Poly', daysActive: 4 },
 { name: 'Chelsey', daysActive: 2 },
 { name: 'Ajax', daysActive: 27 },
 { name: 'Mango', daysActive: 15 },
];

Я могу сделать find искать по каждому имени, пушить в новый массив и т.д. Может есть более простой вариант. По факту может быть 20 имен, можно как-то сделать универсальный сортировщик для любого количества данных? Кукую-то рекурсия например, передавать массив для сортировки в нужном порядке и на выходе будет отсортированный массив. Очень буду благодарен. Заранее спасибо.


Ответы (2 шт):

Автор решения: NoSkill

Вам каждый раз нужно явно задавать порядок сортировки.

const users = [
  { name: 'Dummy', daysActive: 0 },
  { name: 'Mango', daysActive: 15 },
  { name: 'Poly', daysActive: 4 },
  { name: 'Ajax', daysActive: 27 },
  { name: 'Chelsey', daysActive: 2 },
];

function customSort(a, s) {
  return a.sort(function(x1, x2) {
    var i1 = s.indexOf(x1.name), 
        i2 = s.indexOf(x2.name);
    return i1 < 0 ? 1 : i2 < 0 ? -1 : i1 - i2;
  })
}

customSort(users, ['Poly', 'Chelsey', 'Ajax', 'Mango']);

console.log(users);

→ Ссылка
Автор решения: Rintuse

Комент оставить не могу, не хватает репутации) Если надо чтобы имена не из массива попали в конец отсортированного массива, то надо добавить одну строчку к предложенному ответу:

function customSort(a, s) {
  return a.sort(function (x, y) {
    if (s.indexOf(x.name) === -1) return 1
    return s.indexOf(x.name) - s.indexOf(y.name);
  });
}
→ Ссылка