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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值