Задать вопрос
@ishimskayamahorka14

Как сортировать массив сначала по числам по возрастанию, затем буквы — по алфавиту?

Имеется JS-массив, который содержит набор чисел и букв в хаотичном порядке. Распишем данный массив как 1,A,V,2,3,11,C где , - это наш условный разделитель. Как сортировать массив так, чтобы получилось на выходе 1,2,3,11, A, C, V?
Т.е. сначала сортируем числа, а потом буквы, причем цифры должны иметь сортировку не по номинальным цифрам, а по своему числовому значению.
  • Вопрос задан
  • 680 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Сортируем существующий массив:

arr.sort((a, b) => {
  return Number.isNaN(+a) || Number.isNaN(+b)
    ? a.localeCompare(b)
    : a - b;
});

// или

arr.sort((a, b) => (a - b) || a.localeCompare(b));

Собираем отсортированный новый:

const sorted = (arr, keys) => arr
  .map(n => [ n ].concat(keys(n)))
  .sort((a, b) => {
    let diff = 0;
    a.find((n, i) => diff = i && ((n < b[i]) ? -1 : +(n > b[i])));
    return diff;
  })
  .map(n => n[0]);


const sortedArr = sorted(arr, n => [ +n, n.toLowerCase() ]);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы