Я ищу самый простой способ сортировки массива, состоящего из чисел и текста, а также их комбинации.
Например
'123asd'
'19asd'
'12345asd'
'asd123'
'asd12'
превращается в
'19asd'
'123asd'
'12345asd'
'asd12'
'asd123'
Это будет использоваться в сочетании с решением другого вопроса, который я здесь задавал .
Функция сортировки сама по себе работает, мне нужна функция, которая может сказать, что «19asd» меньше, чем «123asd».
Я пишу это в JavaScript.
Редактировать: как указал adormitu , я ищу функцию естественной сортировки
How do you do string comparison in JavaScript?
на stackoverflow.com/questions/51165/…Ответы:
Теперь это возможно в современных браузерах, использующих localeCompare. Передав
numeric: true
опцию, он будет умно распознавать номера. Вы можете использовать регистронезависимое использованиеsensitivity: 'base'
. Протестировано в Chrome, Firefox и IE11.Вот пример. Возвращается
1
, то есть 10 идет после 2:'10'.localeCompare('2', undefined, {numeric: true, sensitivity: 'base'})
Для повышения производительности при сортировке большого количества строк в статье говорится:
источник
Так вам нужен натуральный сорт ?
Если так, то, возможно, вам понадобится сценарий Брайана Хьюсмана, основанный на творчестве Дэвида Коелла .
Похоже, что решение Брайана Хуисмана теперь прямо размещено в блоге Дэвида Коуля:
источник
Для сравнения значений вы можете использовать метод сравнения
Но для ускорения сортировки массива, перед сортировкой нужно настроить массив, поэтому вам нужно выполнять преобразования в нижнем регистре и регулярное выражение только один раз, а не на каждом этапе сортировки.
источник
String.prototype.tlc()
? Это ваш собственный код или вы откуда-то его взяли? Если последнее, пожалуйста, ссылку на страницу.Если у вас есть массив объектов, вы можете сделать это так:
Показать фрагмент кода
источник
Самая полнофункциональная библиотека, которая справится с этим с 2019 года, кажется естественной .
Он не только принимает массивы строк, но и может сортировать по значению определенного ключа в массиве объектов. Он также может автоматически идентифицировать и сортировать строки: валюты, даты, валюта и множество других вещей.
Удивительно, но это также только 1,6 КБ в сжатом виде.
источник
Представьте себе 8-разрядную функцию заполнения, которая преобразует:
Мы можем использовать дополненные строки, чтобы помочь нам отсортировать «19asd» до «123asd».
Используйте регулярное выражение,
/\d+/g
чтобы помочь найти все числа, которые должны быть дополнены:Следующее демонстрирует сортировку с использованием этой техники:
Промежуточные результаты показывают, что делает подпрограмма natural_expand (), и дают вам понимание того, как будет работать последующая подпрограмма natural_compare:
Выходы:
источник
Основываясь на ответе @Adrien Be выше и используя код, созданный Brian Huisman & David koelle , вот модифицированная сортировка прототипа для массива объектов:
источник