JS數組的重排序方法/reverse()和sort()

在數組中存在着兩個自身的重排序的方法:reverse()和sort()。固然,只有這兩個方法還不足排序全部類型的數組,還能夠定義一些比較函數來結合以上兩個方法實現對數組的重排序。數組

  • reverse() 顛倒數組中元素的順序
  • sort() 對數組的元素進行排序
  • 定義比較函數 實現對數值類型或者其valueOf()方法會返回數值類型的對象類型

reverse()

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()方法按升序排列數組項——及最小的值在最前面,最大的值在後面。爲了實現排序,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
複製代碼

固然這個是升序的排列數組,想要實現降序,有兩種方法。字符串

  • 一是能夠直接對以上這個升序後的數組使用reverse() 方法,再輸出結果,就已是降序的效果了,如何使用已經在前面講過了,就不演示了;
  • 二是對比較函數作出一點修改,把返回值交換一下,交換了返回值就已經讓更大的值排位在前了,也就是實現了降序。 代碼以下:
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;
}
複製代碼
相關文章
相關標籤/搜索