And*_*rin 25 javascript sorting
有很多例子可以通过某些属性(即'title')对一些JSON数组进行排序.我们正在使用比较函数,如下所示:
function sortComparer(a, b) {
if (a.title == b.title)
return 0;
return a1 > b1 ? 1 : -1;
}
Run Code Online (Sandbox Code Playgroud)
问题是塞尔维亚拉丁字母顺序看起来像"A,B,C,Č,Ć,D,......"当使用上面的sortComparer时,我在"Č"或"Ć"之前得到D排序.知道如何对当前的文化语言进行排序吗?
And*_*ris 37
如果系统中的语言环境设置正确,那么您可以使用localeCompare方法而不是大于运算符来比较字符串 - 此方法可识别语言环境.
function sortComparer(a,b){
return a.title.localeCompare(b.title)
};
Run Code Online (Sandbox Code Playgroud)
要使用自定义设置对数组进行排序,请执行以下操作:
\n创建一个具有自定义字母顺序的数组:
\nvar alphabets = ["A", "B", "C", "\xc4\x8c", "\xc4\x86", "D","D\xc5\xbe","\xc4\x90","E","F","G","H","I","J","K","L","Lj","M","N","Nj","O","P","R","S", "\xc3\x9b\xc5\x92","T","U","V","Z","\xc5\xbd"];
创建测试数组列表:
\nvar testArrray = ["B2","D6","A1","\xc4\x865","\xc4\x8c4","C3"];
创建排序函数名称:
\nfunction OrderFunc(){\n testArrray.sort(function (a, b) {\n return CharCompare(a, b, 0);\n });\n }\nRun Code Online (Sandbox Code Playgroud)\n创建 CharCompare 函数(索引:在“AAAC”之前排序“AAAB”):
\n function CharCompare(a, b, index) {\n if (index == a.length || index == b.length)\n return 0;\n //toUpperCase: isn\'t case sensitive\n var aChar = alphabets.indexOf(a.toUpperCase().charAt(index));\n var bChar = alphabets.indexOf(b.toUpperCase().charAt(index));\n if (aChar != bChar)\n return aChar - bChar\n else\n return CharCompare(a,b,index+1)\n }\nRun Code Online (Sandbox Code Playgroud)\n调用 OrderFunc 对 testArray 进行排序(结果将是:A1,B2,C3,\xc4\x8c4,\xc4\x865,D6)。
\n祝你好运
\n