博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

JS sort函数的应用(转)

Posted on 2012-10-03 10:31  蜗牛57  阅读(257)  评论(0编辑  收藏  举报

  最近遇到了一个面试题目,关于排序的问题,为了完善自己的知识点,这里就写一下学习笔记

 

 1 <html>   
 2 <head>   
 3 <TITLE>class_obj_js_class</TITLE>   
 4 <script language=javaScript>   
 5 //sort()方法默认是按照ASCII码大小排序,看下面两个例子  
 6 function sortDemo(){  
 7    var a, l;                       // 声明变量。  
 8    a = new Array("X" ,"y" ,"d", "Z", "v","m","r");  
 9    l = a.sort();                   // 排序数组。  
10    alert(l);  
11    return(l);                      // 返回排序的数组。  
12 }  
13 //sortDemo();  
14   
15 function sortDemo2(){  
16     var arr = [50,200,3000];  
17     arr.sort();  
18     alert(arr);  
19 }  
20 //显示的结果为200、3000、50,因为是根据首字母2,3,5判断的  
21 //sortDemo2();  
22   
23 //将上面的数字按照数字大小写排序,if条件是对大小的判断,因此就算对大小的排序  
24 function testFunction(){  
25     var numArr = new Array(9,23,124);  
26     numArr.sort(function compare(a,b){  
27         if(a>b){  
28             return 1;//按照升序排列,即a排在b的后面  
29         }  
30         else  
31             return -1;  
32     });  
33     alert(numArr);  
34 }  
35 //testFunction();  
36   
37 //如果sort(sortfunction)中的sortfunction在a>b返回的值为真则是按照降序排列,反之按照升序排列  
38 function testFunction2(){  
39     var numArr = new Array(9,124,23);  
40     numArr.sort(function compare(a,b){  
41         alert("a : " + a);  
42         alert("b : " + b);   
43         if(a > b){  
44             alert("a > b,返回正数");  
45             return -1;//按照降序排列,即a排在b的前面  
46         }  
47         else{  
48             alert("a < b,返回负数");  
49             return 1;  
50         }     
51     });  
52     alert(numArr);  
53 }  
54 //testFunction2();  
55   
56 /*要使数组的元素按先奇数后偶数的顺序排列,则若需a、b交换,仅当满足a是偶数且b是奇数条件即可,再按从小到大排序,仅当满足a、b均是奇数或偶数且a>b时即可 
57 从下面的例子可以看出,根据if的条件就是需要排序的要求,返回的值大于0就可以了,就是对一次条件的排序*/  
58 function testAdvance(){  
59     var a = [1, 7, 3, 9, 5, 6, 2, 8, 4];  
60     function f(a, b) {  
61         if (0 == a % 2 && 1 == b % 2) {  
62             return 1;//即对偶数和奇数排序  
63         }  
64         if ((1 == a % 2 && 1 == b % 2 || 0 == a % 2 && 0 == b % 2) && a > b) {  
65             return 1;//对奇数和偶数排序  
66         }  
67         return -1;  
68     }  
69     alert(a.sort(f));  
70 }  
71 //testAdvance();  
72   
73 //我们要做的就是写出if里面的条件,这个条件就是返回a、b需要交换的条件  
74 //譬如:对var a=["a","A","B","b"];进行不分大小写并从大到小排序,仅当a.toString().toLowerCase() < b.toString().toLowerCase()时,交换a、b,所以用此填充if条件即可。  
75 function testAdvance1(){  
76     var a=["a","A","B","b"];  
77     a.sort(function test(a,b){  
78         if(a.toString().toLowerCase() < b.toString().toLowerCase()){  
79             return 1;  
80         }  
81         else   
82             return -1;  
83     });  
84     alert(a);  
85 }  
86 testAdvance1();  
87 </script>   
88   
89 <body >   
90   
91 </body>   
92 </html>