在數組中存在着兩個自身的重排序的方法:reverse()和sort()。固然,只有這兩個方法還不足排序全部類型的數組,還能夠定義一些比較函數來結合以上兩個方法實現對數組的重排序。數組
reverse() 方法會反轉數組的數組項的排序,該方法會改變原來的數組,而不會建立新的數組。bash
代碼實現及效果以下:函數
var value = [1,2,3,4,5,9,2];
var value1 = [a,b,c,d,e,b];
value.reverse();
value1.reverse();
alert(value); //2,9,5,4,3,2,1
alert(value1); //b,e,d,c,b,a
複製代碼
輸出的結果是反轉了數組項的順序,這個方法至關直觀明瞭,可是不夠靈活。ui
在默認的狀況下,sort()方法按升序排列數組項——及最小的值在最前面,最大的值在後面。爲了實現排序,sort()方法會調用每一個數組的toString() 轉型方法,而後比較字符串,以確認如何排序。值得注意的是,即便數組中每一項都是數值,sort() 方法比較的都是字符串,說的更具體一點先將數組的元素都轉換成字符串,而後是按照字符編碼的順序進行排序。編碼
var value = [0,1,5,10,15];
value.reverse();
alert(value); //0,1,10,15,5
複製代碼
由例子可見,即便順序原本是沒有問題的,可是使用了sort() 方法也會根據字符串的結果改變原來的順序。由於數值5雖然小於10,可是在進行字符串比較時,"5"位於"10"的後面,因此數組的順序就被修改了。
使用sort() 方法在排列純數值的數組的時候,並非什麼好方案,這時候就要接收一個比較函數做爲參數,使得能正確的排列數值的數組。spa
比較函數接收兩個參數,若是第一個參數應該位於第二個以前則返回一個負數,若是兩個參數相等則返回0,若是第一個參數應該位於第二個以後則返回一個正數。code
升序的代碼以下所示:對象
function compare(value1,value2){
if(value1 < value2){
return -1;
}else if(value1 > value2){
return 1;
}else{
return 0;
}
}
複製代碼
這個函數能夠適用於大多數的數據類型,只要將其做爲參數傳遞sort() 方法便可,以下所示:排序
var values = [1,3,4,6,5,2,8];
values.sort(compare);
alert(values); //1,2,3,4,5,6,8
複製代碼
固然這個是升序的排列數組,想要實現降序,有兩種方法。字符串
function compare(value1,value2){
if(value1 < value2){
return 1;
}else if(value1 > value2){
return -1;
}else{
return 0;
}
}
複製代碼
簡化版: emmm這個是一個更簡單的比較函數,因爲比較函數是經過返回一個小於零、大於零或等於零的值來影響排序結果,所以一個簡單的減法操做就能夠適當的處理中數值數組排序的狀況。 升序的代碼以下:
function compare(value1,value2){
return value1 - value2;
}
複製代碼
降序的代碼以下:
function compare(value1,value2){
return value2 - value1;
}
複製代碼