There are a lot of examples for sorting some JSON array by some property (i.e. 'title') We are using compare function like this one:
function sortComparer(a, b) { if (a.title == b.title) return 0; return a1 > b1 ? 1 : -1; }
Problem is that Serbian Latin alphabet order looks like "A, B, C, Č, Ć, D,..." When using sortComparer above I am getting D sorted before "Č" or "Ć". Any idea how to sort respecting current culture language?
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) };
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With