Просто хотів залишити це тут, оскільки, згідно з іншими коментарями, відповідь Гуффи, схоже, набирає популярності, остаточний третій рівень - що було одним із негативних коментарів до цієї відповіді непотрібний. Також використання функцій стрілок робить його набагато чистішим.
Крім того, його легко розширити для обробки масивів об'єктів.
const first = "role";
data.sort((x, y) => first === x ? -1 : first === y)
Я вважаю, що це також повинно впоратись з турботою щодо решти масиву, на який впливає. Коли функція сортування повертає число менше 0 (перший === x), елемент рухатиметься до початку масиву, коли поверне 0 (перший! == y), руху не буде, і коли число більше за 0 (спочатку === y), x рухатиметься до кінця масиву, все відносно x та y. Отже, коли ні x, ні y не еквівалентні бажаному першому елементу (або це ідентифікатор у випадку сортування об’єктів), не буде переміщення двох по відношенню один до одного.
Для об’єкта:
const unsorted = [{'id': 'test'}, {'id': 'something'}, {'id': 'else'}];
const first = 'something';
const sorted = unsorted.sort((x,y) => x['id'] === first ? -1 : y['id'] === first);