sort() 方法用于對數(shù)組的元素進行排序,并返回數(shù)組。默認排序順序是根據(jù)字符串Unicode碼點。
語法:array.sort(fun);參數(shù)fun可選绣张。規(guī)定排序順序。必須是函數(shù)关带。
注:如果調(diào)用該方法時沒有使用參數(shù)侥涵,將按字母順序?qū)?shù)組中的元素進行排序,說得更精確點,是按照字符編碼的順序進行排序独令。
如果想按照其他規(guī)則進行排序端朵,就需要提供比較函數(shù)好芭,該函數(shù)要比較兩個值燃箭,然后返回一個用于說明這兩個值的相對順序的數(shù)字。比較函數(shù)應(yīng)該具有兩個參數(shù) a 和 b舍败,其返回值如下:
若 a 小于 b招狸,在排序后的數(shù)組中 a 應(yīng)該出現(xiàn)在 b 之前,則返回一個小于 0 的值邻薯。
若 a 等于b裙戏,則返回 0。
若 a 大于 b厕诡,則返回一個大于 0 的值累榜。
簡單點就是:比較函數(shù)兩個參數(shù)a和b,返回a-b 升序灵嫌,返回b-a 降序
//注:原數(shù)組發(fā)生改變
例:
1.不傳參數(shù)壹罚,將不會按照數(shù)值大小排序,按照字符編碼的順序進行排序寿羞;
var arr = ['General','Tom','Bob','John','Army'];
var resArr = arr.sort();
console.log(resArr);//輸出? ["Army", "Bob", "General", "John", "Tom"]
var arr2 = [30,10,111,35,1899,50,45];
var resArr2 = arr2.sort();
console.log(resArr2);//輸出? [10, 111, 1899, 30, 35, 45, 50]
2.傳入?yún)?shù)猖凛,實現(xiàn)升序,降序绪穆;
var arr3 = [30,10,111,35,1899,50,45];
arr3.sort(function(a,b){
return a - b;
})
console.log(arr3);//輸出? [10, 30, 35, 45, 50, 111, 1899]
var arr4 = [30,10,111,35,1899,50,45];
arr4.sort(function(a,b){
return b - a;
})
console.log(arr4);//輸出 [1899, 111, 50, 45, 35, 30, 10]
3.根據(jù)數(shù)組中的對象的某個屬性值排序辨泳;
var arr5 = [{id:10},{id:5},{id:6},{id:9},{id:2},{id:3}];
arr5.sort(function(a,b){
return a.id - b.id
})
console.log(arr5);
//輸出新的排序
// {id: 2}
// {id: 3}
// {id: 5}
// {id: 6}
// {id: 9}
// {id: 10}
4.根據(jù)數(shù)組中的對象的多個屬性值排序,多條件排序玖院;
var arr6 = [{id:10,age:2},{id:5,age:4},{id:6,age:10},{id:9,age:6},{id:2,age:8},{id:10,age:9}];
arr6.sort(function(a,b){
if(a.id === b.id){//如果id相同菠红,按照age的降序
return b.age - a.age
}else{
return a.id - b.id
}
})
console.log(arr6);
//輸出新的排序
// {id: 2, age: 8}
// {id: 5, age: 4}
// {id: 6, age: 10}
// {id: 9, age: 6}
// {id: 10, age: 9}
// {id: 10, age: 2}