關於數組排序(順序,逆序)


數組中已經存在兩個可以直接用來排序的方法:reveres()和sort()。

reveres()方法會反轉數組項的順序。

在默認情況下,sort()方法按升序排列數組項——即最小的值位於最前面,最大的值排在最后面。

為了實現排序,sort()方法會調用每個數組項的toString()轉型方法,然后比較得到的字符串,以確定如何排序。即使數組中的每一項都是數值,sort()方法比較的也是字符串,如下所示。

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

values.sort();

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

可見,即使例子中值的順序沒有問題,但sort()方法也會根據測試字符串的結果改變原來的順序。因為數字5雖然小於10,但在進行字符串比較時,“10”則位於“5”的前面,於是數組的順序就被修改了。不用說,這種排序方式在很多情況下都不是最佳方案。因此sort()方法可以接收一個比較函數作為參數,以便我們制定哪個值位於哪個值的前面。

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

function compare(value1, value2) {
        if (value1 < value2) {
            return -1;
        } else if (value1 > value2) {
            return 1;
        } else {
            return 0;
        }
    }
    var arr = [1, 5, 6, 7, 3, 9];
    arr.sort(compare);
    alert(arr); // 1,3,5,6,7,9

這個比較函數可以適用於大多數數據類型,只要將其作為參數傳遞給sort()方法即可。

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

function compare(value1, value2) {
        if (value1 < value2) {
            return 1;
        } else if (value1 > value2) {
            return -1;
        } else {
            return 0;
        }
    }
    var arr = [1, 5, 6, 7, 3, 9];
    arr.sort(compare);
    alert(arr);//9,7,6,5,3,1

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

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

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


免責聲明!

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



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