1. 程式人生 > >js陣列排序 reverse()和sort()方法的使用,

js陣列排序 reverse()和sort()方法的使用,

js陣列排序 reverse()和sort()方法的使用, 

陣列中已經存在兩個可以直接用來重排序的方法:reverse()和sort()。reverse()方法會對反轉陣列項的順序。請看下面的例子: 

var values = [1, 2, 3, 4, 5]; 

values.reverse(); 

alert(values);  //5,4,3,2,1 

這裡陣列的初始值及順序是1、2、3、4、5。而呼叫陣列的reverse()方法後,其值的順序變成了5、4、3、2、1。這個方法的作用相當只管明瞭,但不夠靈活,因此才有了sort()方法。 

在預設情況下,sort()方法按升序排列陣列——即最小的值位於最前面,最大的值排在最後面。為了實現排序,sort()方法會呼叫每個陣列項的toString()轉型方法,然後比較得到字串,以確定如何排序。即使陣列中的每一項都是陣列,sort()方法比較的也是字串,如下所示: 

var values = [0, 1, 5, 10, 15]; 

values.sort(); 

alert(values);  //0,1,10,15,5 


這種排序方式在很多情況下都不是最佳方案。因此sort()方法可以接受一個比較函式作為引數,以便我們指定那個值位於那個值的前面。 


比較函式接受兩個引數,如果第一個引數應該位於第二個之前則返回一個負數,如果兩個引數相等,則返回0,如果第一個引數位於第二個之後則返回一個正數。以下就是一個簡單的比較函式: 


function compare(value1, value2) { 

   if (value1 < value2) { 

       return -1; 

   } else if (value1 > value2) { 

       return 1; 

   } else { 

       return 0; 

   } 

這個比較函式可以使用於大多數資料型別,只要將其作為引數傳遞給sort()方法即可,如下面這個例子所示: 

var values = [0, 1, 2, 5, 10, 15]; 

values.sort(compare); 

alert(values);  //0,1,5,10,15 

在將比較函式傳遞到sort()方法之後,數值仍然保持了正確的升序。當然,也可以通過比較函式產生降序排序的結果,只要交換比較函式返回的值即可: 


function compare(value1, value2) { 

   if (value1 < value2) { 

       return 1; 

   } else if (value1 > value2) { 

       return -1; 

   } else { 

       return 0; 

   } 

var values = [0, 1, 2, 5, 10, 15]; 

values.sort(compare); 

alert(values);  //15,10,5,1,0 

reverse()和sort()方法會返回值是經過排序之後的陣列。 

對於數值型別或者其valueOf方法會返回數值型別的物件型別,可以使用一個更簡單的比較函式。這個函式只要用第二個值減第一個值即可: 

function compare(value1, value2) { 

   return value2 - value1; 

由於比較函式通過返回一個小於零、等於零或大於零的值來影響排序結果,因此減法操作就可以適當處理所有情況。 


轉載註明本文地址: http://www.ablanxue.com/prone_2869_1.html