javascript sort with unicode
Solution 1:
If the locale in your system is set correctly then you can use localeCompare
method instead of greater-than operator to compare the strings - this method is locale aware.
function sortComparer(a,b){
return a.title.localeCompare(b.title)
};
Solution 2:
For sorting an array with custom setting do as following:
-
Create an array with a custom order of alphabets:
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","Ž"];
-
Create a list of test array:
var testArrray = ["B2","D6","A1","Ć5","Č4","C3"];
-
Create a sort function name:
function OrderFunc(){ testArrray.sort(function (a, b) { return CharCompare(a, b, 0); }); }
-
create the CharCompare function(index: sort "AAAB" before "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)
}
Call OrderFunc for sorting the testArray(the result will be : A1,B2,C3,Č4,Ć5,D6).
Test Online
Good Luck