js中原生的sort()采用快排和插入排序算法,根據比較器對數組排序。
默認是將數組元素轉為字符串,然后根據Unicode字符集編號的大小排序。
charCodeAt(index) 返回指定位置字符的 Unicode 編號,取值是 0 - 65535 間的整數,與 charAt() 方法執行的操作相似,后者返回的是單個字符。
如果不提供比較器而對數字組成的數組排序,因為會將數字轉為字符串再按編號排序而導致錯誤。要獲得正確的順序,只需提供比較器函數:function(a,b){return a-b;}即可。
兩個字符串之間不可以加減運算,但可以比大小,js會依次比編號的大小,如"
'a'>'A' //為true,因為 "a".charCodeAt(0)-->97, A-->65 "ac">"ab" //為true
按拼音順序排序:
//按本地語言的順序排序。中英混合時,中文在前英文在后,再分別按拼音順序排。 function (a, b) { return a.localeCompare(b); }
按指定的順序排序:
//按指定的特定順序排序,相同時再按enu2的順序排
//利用規則的索引做排序依據 var enu1=['D','E','C','B','A','A0','A00']; var enu2=['NB','HB','SUV','MPV','SW','Roadster/Coupe/Convertible','-','']; var toSort= ["A00 HB", "A HB", "A0 SUV", "A0 SUV", "A SUV", "E SUV","D NB","A0 HB", "A SUV", "E MPV", "A NB", "C NB", "C HB", "A MPV", "B NB", "A0 NB", "A0 NB"]; toSort.sort(function(a,b){ if(enu1.indexOf(a.split(' ')[0])<enu1.indexOf(b.split(' ')[0])) return -1; if(enu1.indexOf(a.split(' ')[0])>enu1.indexOf(b.split(' ')[0])) return 1; if(enu1.indexOf(a.split(' ')[0])==enu1.indexOf(b.split(' ')[0])) { return enu2.indexOf(a.split(' ')[1])-enu2.indexOf(b.split(' ')[1]) } });
//["D NB", "E SUV", "E MPV", "C NB", "C HB", "B NB", "A NB", "A HB", "A SUV", "A SUV", "A MPV", "A0 NB", "A0 NB", "A0 HB", "A0 SUV", "A0 SUV", "A00 HB"]