首頁 > web前端 > js教程 > 主體

javascript sort方法怎麼排序

青灯夜游
發布: 2023-01-07 11:43:57
原創
12738 人瀏覽過

在javascript中, sort方法用於根據一定條件對陣列元素進行排序。如果在呼叫sort()方法時沒有傳遞參數,則按字母順序對數組中的元素進行排序;如果提供一個函數參數,則根據該函數提供的順序來對數組中的元素進行排序。

javascript sort方法怎麼排序

本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

sort() 方法能夠根據一定條件對陣列元素進行排序。如果在呼叫 sort() 方法時沒有傳遞參數,則按字母順序對數組中的元素進行排序。

var a = ["a","e","d","b","c"];  //定义数组
a.sort();  //按字母顺序对元素进行排序
console.log(a);  //返回数组[a,b,c,d,e]
登入後複製

使用 sort() 方法時,應該注意下面幾個問題。

1) 所謂的字母順序,實際上是根據字母在字元編碼表中的順序進行排列的,每個字元在字元表中都有一個唯一的編號。

2) 如果元素不是字串,則 sort() 方法試圖把陣列元素都轉換成字串,以便進行比較。

3) sort() 方法將根據元素值進行逐位比較,而不是根據字串的數量進行排序。

var a = ["aba","baa","aab"];  定义数组
a.sort();  //按字母顺序对元素进行排序
console.log(a);  //返回数组[aab,aba,baa]
登入後複製

在排序時,首先比較每個元素的第 1 個字符,在第 1 個字符相同的情況下,再比較第 2 個字符,以此類推。

4) 在任何情況下,陣列中 undefined 的元素都被排序在最後。

5) sort() 方法是在原始數組基礎上進行排序操作的,不會建立新的陣列。

sort() 方法不僅按字母順序進行排序,還可以根據其他順序執行操作。這時就必須為方法提供一個函數參數,該函數要比較兩個值,然後傳回一個用於說明這兩個值的相對順序的數字。排序函數應該有兩個參數 a 和 b,,其傳回值如下。

  • 如果根據自訂評判標準,a 小於 b,在排序後的陣列中 a 應該出現在 b 之前,就傳回一個小於 0 的值。

  • 如果 a 等於 b,就回傳 0。

  • 如果 a 大於 b,就回傳一個大於 0 的值。

範例1

在下面範例中,將根據排序函數比較陣列中每個元素的大小,並按從小到大的順序執行排序。

function f(a,b) {  //排序函数
    return (a - b);  //返回比较参数
}
var a = [3,1,2,4,5,7,6,8,0,9];  //定义数组
a.sort(f);  //根据数字大小由小到大进行排序
console.log(a);  //返回数组[0,1,2,3,4,5,6,4,7,8,9]
登入後複製

如果按從大到小的順序執行,則讓傳回值取反即可。程式碼如下:

function f(a,b) {  //排序函数
    return -(a - b);  //取反并返回比较参数
}
var a = [3,1,2,4,5,7,6,8,0,9];  //定义数组
a.sort(f);  //根据数字大小由小到大进行排序
console.log(a);  //返回数组[9,8,7,6,5,4,3,2,1,0]
登入後複製

範例2

依奇偶性質排列陣列。

sort() 用法比較靈活,主要是函數排序比較。例如,如果根據奇偶數順序排序數組,只需要判斷順序函數中兩個參數是否為奇偶數,並決定排列順序。

function f(a, b) {  //排序函数
    var a = a % 2;  //获取参数a的奇偶性
    var b = b % 2;  //获取参数b的奇偶性
    if (a == 0) return 1;  //如果参数a为偶数,则排在左边
    if (b == 0) return -1;  //如果参数b为偶数,则排在右边
}
var a = [3,1,2,4,5,7,6,8,0,9];  //定义数组
a.sort(f);  //根据数字大小由大到小进行排序
console.log(a);  //返回数组[3,1,5,7,9,0,8,6,4,2]
登入後複製

sort() 方法在呼叫排序函數時,對每個元素值傳遞給排序函數,如果元素值為偶數,則保留其位置不動;如果元素值為奇數,則調換參數a和b 的顯示順序,從而實現對數組中所有元素執行奇偶排序。如果希望偶數排在前面,奇數排在後面,則只需要取回傳值。排序函數如下。

function f(a, b) {
    var a = a % 2;
    var b = b % 2;
    if (a == 0) return -1;
    if (b == 0) return 1;
}
登入後複製

範例3

不區分大小寫排序字串。

在正常情況下,對字串進行排序是區分大小寫的,這是因為每個大寫字母和小寫字母在字元編碼表中的順序是不同的,大寫字母大於小寫字母。

var a = ["aB", "Ab", "Ba", "bA"];  //定义数组
a.sort();  //默认方法排序
console.log(a);  //返回数组["Ab", "Ba", "aB", "bA"]
登入後複製

大寫字母總是排在左側,如果讓小寫字母總是排在左側,可以設計:

function f(a ,b) {
    return (a < b);
}
var a = ["aB", "Ab", "Ba", "bA"];  //定义数组
a.sort();  //默认方法排序
console.log(a);  //返回数组["Ab", "Ba", "aB", "bA"]
登入後複製

對於字母比較大小時,JavaScript 是根據字元編碼大小來決定的,當為true 時,則傳回1;為false 時,則傳回-1。

如果不希望區分大小寫,大寫字母和小寫字母按相同順序排列,可以設計:

function f(a, b) {
    var a = a.toLowerCase;
    var b = b.toLowerCase; 
    if (a < b) {
        return 1;
    }
    else {
        return -1;
    }
}
var a = ["aB", "Ab", "Ba", "bA"];  //定义数组
a.sort();  //默认方法排序
console.log(a);  //返回数组["aB", "Ab", "Ba", "bA"]
登入後複製

如果要調整排列順序,則設定傳回值取反即可。

範例4

把浮點數和整數分開顯示。

function f(a, b) {  //排序函数
    if (a > Math.floor(a)) return 1;  //如果a是浮点数,则调换位置
    if (b > Math.floor(b)) return -1;  //如果b是浮点数,则调换位置
}
var a = [3.5555, 1.23456, 3, 2.11111, 5, 7, 3];  //定义数组
a.sort(f);  //进行筛选
console.log(a);  //返回数组[3,5,7,3,2.11111,1.23456,3.55555]
登入後複製

如果要調整排序順序,則設定回傳值取反即可。

【推薦學習:javascript高階教學

#

以上是javascript sort方法怎麼排序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板