Сортировка массива коллекций в нужном порядке 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 шт):
Вам каждый раз нужно явно задавать порядок сортировки.
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);
Комент оставить не могу, не хватает репутации) Если надо чтобы имена не из массива попали в конец отсортированного массива, то надо добавить одну строчку к предложенному ответу:
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);
});
}