Показать сообщение отдельно
  #1 (permalink)  
Старый 13.08.2020, 15:56
Новичок на форуме
Отправить личное сообщение для koros Посмотреть профиль Найти все сообщения от koros
 
Регистрация: 13.08.2020
Сообщений: 6

Сортировка смешанного массива.
Есть массив, в котором находятся имена файлов. Задача отсортировать массив в алфавитном порядке, то есть так, как эти имена файлов отображаются в файловом менеджере.
Если имена состоят только из букв или только из цифр, то легко:
var myFilteredFiles = ["A", "B", "C", "g10", "g8", "g1", "11", "H"];
myFilteredFiles.sort(function(x, y){
    var r = x - y;
    if(isNaN(r)){
        r = isNaN(x) - isNaN(y);
        if(r == 0) r = x.toLocaleLowerCase().localeCompare(y.toLocaleLowerCase());
    }
    return r;  
 });

Получим ["1", "8", "10", "11", "A", "B", "C", "H"]
Но если в именах встречаются и буквы и цифры, то сортировка не получается: ["A", "B", "C", "g10", "g8", "g1", "11", "H"] -> ["11", "A", "B", "C", "g1", "g10", "g8", "H"]. А должно быть ["11", "A", "B", "C", "g1", "g8", "g10", "H"]
Ответить с цитированием