Сортировка javascript с unicode
Существует множество примеров для сортировки некоторого массива JSON по некоторому свойству (т.е. "title" )
Мы используем функцию сравнения, подобную этой:
function sortComparer(a, b) {
if (a.title == b.title)
return 0;
return a1 > b1 ? 1 : -1;
}
Проблема в том, что порядок сербского латинского алфавита выглядит как "A, B, C, Č, Ć, D,..."
При использовании sortComparer выше я получаю D, отсортированный до "Č" или "Ć".
Любая идея, как сортировать уважение к текущему языку культуры?
Ответы
Ответ 1
Если локаль в вашей системе настроена правильно, вы можете использовать метод localeCompare
вместо оператора больше, чем для сравнения строк - этот метод известен локали.
function sortComparer(a,b){
return a.title.localeCompare(b.title)
};
Ответ 2
Вы пробовали функцию String localeCompare()
:
function sortComparer(a, b) {
return a.title.localeCompare(b.title);
}
Отказ от ответственности: Я действительно не тестировал, чтобы увидеть, что localeCompare()
делает с теми неанглийскими символами, и MDN тоже не говорит. (Он говорит, что toLocaleLowerCase()
относится к текущему языку, поэтому можно надеяться, что localeCompare()
будет таким же, но все же...)
Ответ 3
Для сортировки массива с пользовательскими настройками выполните следующие действия:
-
Создайте массив с пользовательским порядком алфавитов:
var alphabets = ["A", "B", "C", "Č", "Ć", "D","Dž","Đ","E","F","G","H","I","J","K","L","Lj","M","N","Nj","O","P","R","S",
"ÛŒ","T","U","V","Z","Ž"];
-
Создайте список тестового массива:
var testArrray = ["B2","D6","A1","Ć5","Č4","C3"];
-
Создайте имя функции сортировки:
function OrderFunc(){
testArrray.sort(function (a, b) {
return CharCompare(a, b, 0);
});
}
-
создайте функцию CharCompare (индекс: выберите "AAAB" перед "AAAC" ):
function CharCompare(a, b, index) {
if (index == a.length || index == b.length)
return 0;
//toUpperCase: isn't case sensitive
var aChar = alphabets.indexOf(a.toUpperCase().charAt(index));
var bChar = alphabets.indexOf(b.toUpperCase().charAt(index));
if (aChar != bChar)
return aChar - bChar
else
return CharCompare(a,b,index+1)
}
-
Вызов OrderFunc для сортировки testArray (результат будет: A1, B2, C3, Č4, Ć5, D6).
Test Online
Удача