JavaScript:sort() 方法


ylbtech-JavaScript:sort() 方法

 JavaScript sort() 方法

1. 定義和用法返回頂部
sort() 方法用於對數組的元素進行排序。
語法
arrayObject.sort(sortby)
參數 描述  
sortby 可選。規定排序順序。必須是函數。  

返回值

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

說明

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

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

  • 若 a 小於 b,在排序后的數組中 a 應該出現在 b 之前,則返回一個小於 0 的值。
  • 若 a 等於 b,則返回 0。
  • 若 a 大於 b,則返回一個大於 0 的值。
2. 實例 1返回頂部
例子 1
在本例中,我們將創建一個數組,並按字母順序進行排序:
<script type="text/javascript">

var arr = new Array(6)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
arr[3] = "James"
arr[4] = "Adrew"
arr[5] = "Martin"

document.write(arr + "<br />")
document.write(arr.sort())

</script>

輸出:

George,John,Thomas,James,Adrew,Martin
Adrew,George,James,John,Martin,Thomas

例子 2

在本例中,我們將創建一個數組,並按字母順序進行排序:

<script type="text/javascript">

    var arr = new Array(6)
    arr[0] = "10"
    arr[1] = "5"
    arr[2] = "40"
    arr[3] = "25"
    arr[4] = "1000"
    arr[5] = "1"

    document.write(arr + "<br />")
    document.write(arr.sort())

</script>

輸出:

10,5,40,25,1000,1
1,10,1000,25,40,5

請注意,上面的代碼沒有按照數值的大小對數字進行排序,要實現這一點,就必須使用一個排序函數:

<script type="text/javascript">

function sortNumber(a,b)
{
return a - b
}

var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"

document.write(arr + "<br />")
document.write(arr.sort(sortNumber))

</script>

輸出:

10,5,40,25,1000,1
1,5,10,25,40,1000

 

3. 實例 2返回頂部
例子 1
在本例中,我們將創建一個數組,並按字母順序進行排序:
<script type="text/javascript">

    // by函數接受一個成員名字符串做為參數
    // 並返回一個可以用來對包含該成員的對象數組進行排序的比較函數
    var by = function (name) {
        return function (o, p) {
            var a, b;
            if (typeof o === "object" && typeof p === "object" && o && p) {
                a = o[name];
                b = p[name];
                if (a === b) {
                    return 0;
                }
                if (typeof a === typeof b) {
                    return a < b ? -1 : 1;
                }
                return typeof a < typeof b ? -1 : 1;
            }
            else {
                throw ("error");
            }
        }
    }

    // 數組
    var employees = []
    employees[0] = { name: "George", age: 32, retiredate: "March 12, 2014" }
    employees[1] = { name: "Edward", age: 17, retiredate: "June 2, 2023" }
    employees[2] = { name: "Christine", age: 58, retiredate: "December 20, 2036" }
    employees[3] = { name: "Sarah", age: 62, retiredate: "April 30, 2020" }

    // 排序
    employees.sort(by("age"));

    // 輸出
    for (var i = 0; i < employees.length; i++)
    {
        document.writeln(employees[i].name + "," + employees[i].age + "," + employees[i].retiredate + "<br>");
    }
</script>

 輸出:

Edward,17,June 2, 2023
George,32,March 12, 2014
Christine,58,December 20, 2036
Sarah,62,April 30, 2020

 例子 2

到這里,對象數組排序就算基本實現了。那如何實現多個鍵值排序呢?意思就是先是對age排序,如果age相同,再比較name。

這時,我們可以進一步修改by函數,讓其可以接受第二個參數,當主要的鍵值產生一個匹配的時候,另一個compare方法將被調用以決出高下。

<script type="text/javascript">

    //by函數接受一個成員名字符串和一個可選的次要比較函數做為參數
    //並返回一個可以用來包含該成員的對象數組進行排序的比較函數
    //當o[age] 和 p[age] 相等時,次要比較函數被用來決出高下
    var by = function (name, minor) {
        return function (o, p) {
            var a, b;
            if (o && p && typeof o === 'object' && typeof p === 'object') {
                a = o[name];
                b = p[name];
                if (a === b) {
                    return typeof minor === 'function' ? minor(o, p) : 0;
                }
                if (typeof a === typeof b) {
                    return a < b ? -1 : 1;
                }
                return typeof a < typeof b ? -1 : 1;
            } else {
                thro("error");
            }
        }
    }

    // 數組
    var employees = []
    employees[0] = { name: "George", age: 32, retiredate: "March 12, 2014" }
    employees[1] = { name: "Edward", age: 17, retiredate: "June 2, 2023" }
    employees[2] = { name: "Christine", age: 58, retiredate: "December 20, 2036" }
    employees[3] = { name: "Sarah", age: 62, retiredate: "April 30, 2020" }

    // 排序
    employees.sort(by('age', by('name')));

    // 輸出
    for (var i = 0; i < employees.length; i++)
    {
        document.writeln(employees[i].name + "," + employees[i].age + "," + employees[i].retiredate + "<br>");
    }
</script>

 輸出:

Edward,17,June 2, 2023
George,32,March 12, 2014
Christine,58,December 20, 2036
Sarah,62,April 30, 2020

 

4.返回頂部
 
5.返回頂部
 
 
6.返回頂部
 
7.返回頂部
 
8.返回頂部
 
9.返回頂部
 
10.返回頂部
 
11.返回頂部
 
warn 作者:ylbtech
出處:http://ylbtech.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


免責聲明!

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



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