JavaScript--数组--sort比较器

因为原装的sort这个API其实是先把要比较的数转换为字符串再进行比较的,所以并不好用

所以准备自定义一个比较器函数:

 1   //sort原理--->sort(arr,compare)
 2     function sort(arr,compare){
 3         if(compare===undefined){//如果compare未定义,则创建一个compare原装比较器,都转化为字符串进行比较,如果传入了自定义比较器,则调用自定义比较器进行排序
 4             compare=function (a,b){//原装比较器
 5                 return String(a)>String(b)?1://大于0则返回1
 6                           String(a)>String(b)?-1://小于0则返回-1
 7                                                         0;//否则返回0
 8             }
 9         }
10         for(var r=1;r<arr.length;r++){//比较次数
11             for(var i=0;i<arr.length-r;i++){//前后两两比较
12                 if(compare(arr[i],arr[i+1])>0){//如果x大于y
13                     var temp=arr[i];//将x的值给第三方temp
14                     arr[i]=arr[i+1];//将y的值给x
15                     arr[i]=temp;//再将temp的值给x
16                 }//也就是x和y互换位置
17             }
18         }
19     }
20     //创建自定义比较器函数
21     /*function cmp(x,y){
22         return x-y;
23     }*/
24     var cmp=function(a,b){return a-b;}//可以直接写在sort(cmp)中,sort(function(a,b){return a-b;});
25     var arr=[8,3,123,15,4,9,7,1,2];
26     arr.sort();//使用默认sort排序
27     console.log(arr.join(" "));
28     var arr2=[8,3,123,15,4,9,7,1,2];
29     arr2.sort(cmp);//使用自定义比较器函数排序,如果sort(cmp()),则是只执行了一次,sort(cmp)表示将cmp函数给予sort使用
30     arr2.reverse();//降序排列,先sort升序,再用reverse反转
31     console.log(arr2.join(" "));

 

posted @ 2016-05-22 18:43  陈小银  阅读(1340)  评论(0编辑  收藏  举报