Javascript 中 Array的 sort()和 compare()方法


Javascript 中 Array的 sort()方法其實是把要排序的內容轉化為string(調用 toString()), 然后按照字符串的第一位 ascii 碼先后順序進行比較,不是數字。

我們看看官方是怎么說的:

arrayobj.sort(sortfunction)

參數

arrayObj

必選項。任意 Array 對象。

sortFunction

可選項。是用來確定元素順序的函數的名稱。如果這個參數被省略,那么元素將按照 ASCII 字符順序進行升序排列。

說明

sort 方法將 Array 對象進行適當的排序;在執行過程中並不會創建新的 Array 對象。

如果為 sortfunction 參數提供了一個函數,那么該函數必須返回下列值之一:

  • 負值,如果所傳遞的第一個參數比第二個參數小。
  • 零,如果兩個參數相等。
  • 正值,如果第一個參數比第二個參數大。

 

<html>
  <head>
    <script type="text/javascript">
        var arr = [1,3, 25];
     arr.sort(); alert(arr);
</script> </head> <body> </body> </html>

結果: 1,25,3

那么怎么辦呢?我們可以寫一個 compare() 方法

<html>
<head>
<script type="text/javascript">
    var arr = [ 1, 3, 25 ];
    arr.sort(compare); //函數名是對象的引用,所以只寫名字就行。
    alert(arr);
    function compare(num1, num2) {
        var temp1 = parseInt(num1);
        var temp2 = parseInt(num2);
        if (temp1 < temp2) {
            return -1;
        } else if (temp1 == temp2) {
            return 0;
        } else {
            return 1;
        }
    }
</script>
</head>
<body>
</body>
</html>

 結果: 1,3,25

我們可以把上面代碼改寫成匿名類的方式:

<html>
<head>
<script type="text/javascript">
    var arr = [ 1, 3, 25 ];
    arr.sort(function (num1, num2)
        {
            var temp1 = parseInt(num1);
            var temp2 = parseInt(num2);
            if (temp1 < temp2) {
                return -1;
            } else if (temp1 == temp2) {
                return 0;
            } else {
                return 1;
            }
        }
    )
    alert(arr);
</script>
</head>
<body>
</body>
</html>

結果一樣: 1,3, 25


免責聲明!

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



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