高阶函数sort
排序中我们经常会用sort这个高阶函数,我们今天就来讲讲这个sort的比较机制,对于数字来说我们只需要比较他们的大小就可以了
但是
var arr =[15,81,9,4,3];
alert(arr.sort()); // 最后的结果是 15 3 4 81 9
结果和我们想的不太一样,说明这个函数的内部不仅仅是比较数字大小那么简单
在看一个
var arr =['Apple','software','Tencent','alibaba'];
alert(arr.sort()); //最后的结果是 Apple Tencent alibaba software
同样是a开头但是结果一个在前,一个在后
或许你已经知道了,但是为了说明问题我们在看一个
var arr =['Apple','software','Tencent','123','89'];
alert(arr.sort());//123 89 Apple software Tencent
最后一句话,其实是 因为字符串根据ASCII码进行排序,而小写字母a的ASCII码在大写字母之后,对于数字呢 先把他转化为String类型 比较1 的ASCII码小于8,所以123 “小于” 89
现在我们来重写sort方法
var arr =[22,9,59,123,89];
arr.sort(
function (x,y){
if(x>y)
return 1;
else if(y<x)
return -1;
else{
return 0;
}
});
alert(arr); //9 22 59 89 123
对于数字,我们直接对它们比较
var arr =['Apple','software','Tencent','alibaba'];
arr.sort(
function (x,y){
s1 = x.toUpperCase();
s2 = y.toUpperCase();
if(s1>s2)
return 1;
else if(s1<s2)
return -1;
else
return 0;
});
alert(arr); // alibaba Apple software Tencent
alert('abb'<'abc'); //true
对于字符串忽略他们大小写进行比较,对字符首字母的ASII码进行比较,如果首字母相同,比较第二个,一直到该字符串末尾