sort() 方法用於對數組的元素進行排序。
語法
arrayObject.sort(sortfunction)
參數
sortfunction 可選。規定排序順序。必須是函數。
返回值
對數組的引用。請注意,數組在原數組上進行排序,不生成副本。
說明
如果調用該方法時沒有使用參數,將按字母升序對數組中的元素進行排序,說得更精確點,是按照字符編碼的順序進行升序排列。先調用每個項的toString()方法,然后按照字符編碼的順序進行排序。。
如果想按照其他標准進行排序,就需要提供比較函數,該函數要比較兩個值,然后返回一個用於說明這兩個值的相對順序的數字。比較函數應該具有兩個參數 a 和 b,其返回值如下:
若 a 小於 b,在排序后的數組中 a 應該出現在 b 之前,則返回一個小於 0 的值。
若 a 等於 b,則返回 0。
若 a 大於 b,則返回一個大於 0 的值。
實例
例子 1
按字母順序進行排序:
var arr = new Array(6); arr[0] = "George"; arr[1] = "John"; arr[2] = "Thomas"; arr[3] = "James"; arr[4] = "Adrew"; arr[5] = "Martin"; console.log(arr.sort().toString());
輸出:
Adrew,George,James,John,Martin,Thomas
例子 2
var arr = new Array(6); arr[0] = "10"; arr[1] = "5"; arr[2] = "40"; arr[3] = "25"; arr[4] = "1000"; arr[5] = "1"; console.log(arr.sort().toString());
輸出:
1,10,1000,25,40,5
請注意,上面的代碼沒有按照數值的大小對數字進行排序,要實現這一點,就必須使用一個排序函數:
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"; console.log(arr.sort(sortNumber).toString());
輸出:
1,5,10,25,40,1000
如上在使用了sortNumber函數之后,就可以返回正確的值了,如果想進行降序排列只需要 return b-a 就可以了。
例子3
function sortArr(a, b) { return a[0] - b[0]; } var arr= [ [1, '張三'], [8, '李四'], [10, '王小二'], [4, '王五'] ] console.log(arr.sort(sortArr).toString());
輸出:
1,張三,4,王五,8,李四,10,王小二
如果a和b本身就是數組,這個時候我們就需要通過對它們內部的值比較來對數組進行排序了,如上述實例。
當第一個比較值相等,但是我們還想進行再次區分的時候,可以使用第二比較值,並且比較的深度可以隨着我們的需求擴展。
function sortArr(a, b) { if (a[0] == b[0]) { return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0; } return a[0] - b[0]; } var arr= [ [1, '張三'], [8, '李四'], [4, '王五'], [4, '牛虻'] ] console.log(arr.sort(sortArr).toString());
輸出:
1,張三,4,牛虻,4,王五,8,李四
例子4
function compare(a, b) { return a.age - b.age } var employees = [] employees[0] = { name: "張三", age: 32 } employees[1] = { name: "李四", age: 17 } employees[2] = { name: "王五", age: 58 } employees[3] = { name: "牛虻", age: 62} employees.sort(compare);
當比較的數據越來越復雜的時候,我們最好使用對象進行排序。這樣我們就能夠從代碼上看出來是使用什么值來進行比較的了。