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