js中的sort方法

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"]

 

原文地址:https://www.cnblogs.com/kevin2chen/p/6646975.html