數組(Array)的重新排序方法


1、reverse()方法:反轉數組;

2、sort()方法:升序排列數組項;

 var values_1 = [1, 2, 3, 4, 5];
 values_1.reverse();   //reverse()反轉數組項的順序
 console.log("reverse()反轉后:" + values_1);   //5,4,3,2,1

 var values_2 = [0, 1, 5, 10, 15];
 values_2.sort();  //升序排列數組
 console.log("sort()排序后:" + values_2); //0,1,10,15,5  ??Why
/*
 * PS:sort()方法會調用每個數組項的toString()轉型方法
 * 所以 引擎把數組的每一項當做一個字符串,先比較每個字符串的第一個字符,按照B>A,3>1這種方式排。如果第一個字符一樣,就比較第二個,以此類推。
 * 例子中的五個數首字母分別是"0","1","5","1","1":
 * 0自然排第一個,5排最后一個。
 * 然后就是1,10和15了。1的第二位沒有字符,10的第二位是0, 15的第二位是5。
 * 所以排序結果為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, 15, 10, 5];
values.sort(compare);
console.log("加了升序比較函數的sort()結果:" + 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, 15, 10, 5];
values.sort(compare);
console.log("加了降序比較函數的sort()結果:" + values);  //15,10,5,1,0

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

function compare(value1, value2){
    return value2 - value1;
}

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM