Страницы

Поиск по вопросам

воскресенье, 15 марта 2020 г.

array.sort() не понимает украинские буквы Є и І

#javascript #массивы


Имеется простой массив имен на украинском языке, в котором имена сортируются в алфавитном
порядке например:




Все сортируется отлично за исключением имен которые начинаются с украинских букв
Є и І — такие имена почему то ставит первыми. Как сделать чтобы они были на нужном месте?
    


Ответы

Ответ 1



Нашел ответ на англоязычной версии StackOverflow:

Ответ 2



Сортировка выполняется на основании кодов символов с учётом регистра. Для изменения порядка сортировки надо написать свой компаратор. Как вариант, сложить алфавит в отдельную строку, приводить аргументы к нужному регистру и сравнивать индексы в искомой строке. Естественно, этот способ медленный и имеет смысл его как-то улучшить, но я не знаю украинский алфавит. Если выполнить на странице википедии такой код var res = {}; document.querySelector("#toc ~ table").textContent.match(/(.)(?= \1)/gi).map(function(x,i) { res[x]=i+1 }) console.log(JSON.stringify(res)) То получится такой объект: {"А":1,"Б":2,"В":3,"Г":4,"Ґ":5,"Д":6,"Е":7,"Є":8,"Ж":9,"З":10,"И":11,"І":12,"Ї":13,"Й":14,"К":15,"Л":16,"М":17,"Н":18,"О":19,"П":20,"Р":21,"С":22,"Т":23,"У":24,"Ф":25,"Х":26,"Ц":27,"Ч":28,"Ш":29,"Щ":30,"Ь":31,"Ю":32,"Я":33} После приведения строки к верхнему регистру, для двух букв-ключей надо сравнивать значения.

Комментариев нет:

Отправить комментарий