高阶函数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码进行比较,如果首字母相同,比较第二个,一直到该字符串末尾

 

posted @ 2017-09-22 21:06  AmbitiousZy  阅读(197)  评论(0编辑  收藏  举报