Javascript數組的排序 sort()方法和reverse()方法

來源:互聯網
上載者:User

其中:

1.JavaScript的sort()中如果沒有指定比較函數,則預設會按照字元的編碼順序進行升序排序。也就是說如果我們想要對數值進行排序得到的不一定是我們想要的結果。

2.Javascript的reverse()將數組中的元素逆序。

先看看上面的第一點,如果有一個數組arr=[1,6,3,7,9],使用arr.sort()後,數組的順序為1,3,6,7,9,得到了我們想要的結果。

再看看下面的一個數組排序:arr=[3,1,16,34,30],如果執行arr.sort()後是不是還是會得到我們想要的1,3,16,30,34呢?

執行後我們發現結果為:1,16,3,30,34,顯然結果不是我們想要的。實際上,sort方法將上面的數值按照字串方式排序了,也就是說和數組arr1=['3','1','16','34','30']的排序結果一致。

代碼如下: 複製代碼 代碼如下:var arr=[3,1,16,34,30];
var arr1=['3','1','16','34','30'];
alert(arr.sort()); // 1,16,3,30,34
alert(arr1.sort()); // 1,16,3,30,34

那麼如果我們想要得到正確的結果:1,3,16,30,34 應該怎麼去做呢?

查詢javascript手冊,手冊中的說明如下:

定義和用法

sort() 方法用於對數組的元素進行排序。

文法

arrayObject.sort(sortby)參數 描述
sortby 可選。規定排序次序。必須是函數。

傳回值

對數組的引用。請注意,數組在原數組上進行排序,不產生副本。

說明

如果調用該方法時沒有使用參數,將按字母順序對數組中的元素進行排序,說得更精確點,是按照字元編碼的順序進行排序。要實現這一點,首先應把數組的元素都轉換成字串(如有必要),以便進行比較。

如果想按照其他標準進行排序,就需要提供比較函數,該函數要比較兩個值,然後返回一個用於說明這兩個值的相對順序的數字。比較函數應該具有兩個參數 a 和 b,其傳回值如下:

若 a 小於 b,在排序後的數組中 a 應該出現在 b 之前,則返回一個小於 0 的值。
若 a 等於 b,則返回 0。
若 a 大於 b,則返回一個大於 0 的值。
=====================================

由以上說明我們可以瞭解到,如果要按照數值進行排序,那麼就要提供一個比較函數。一般常見的比較函數如下: 複製代碼 代碼如下:function sortArr(m,n){
if(m<n)
return -1;//小於,返回-1
else if(m>n)
return 1;//大於,返回1
else return 0;//等於,返回0
}

精簡後可以寫成如下兩種形式: 複製代碼 代碼如下:function sortArr(m,n){
return m-n;
}

複製代碼 代碼如下:function sortArr(m,n){
return m>n?1:(m<n?-1:0);
}

然後執行arr.sort(sortArr),發現可以得到我們想要的結果:1,3,16,30,34.也就說將數組按照整型數值進行了升序排序。
這樣的話新的問題就來了,如果我們想要對數組進行降序排序怎麼做呢?

有一思路就是改變sortArr函數的傳回值,如果m<n時返回正直,m>n時返回負值,m=n時返回0。這樣就可以了。

你可以寫兩個函數,一個升序,一個降序。然後根據不同的需要調用不同的函數就可以了。

此外我們還可以調用上面提到的另一個函數reverse()來輕鬆的實現,當我們進行升序排序後,然後數組在調用reverse()方法將數組逆序,這樣就可以實現數組的降序排序了。

代碼如下: 複製代碼 代碼如下:arr.sort(sortArr).reverse();

總結:這裡主要介紹了Javascript中數組的排序,由於預設按照字串排序,要實現按照其他形式的規則排序就要自己定義比較函數了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.