sort()對數組排序
- sort的描述
- 一、sort函數的基本用法
- 二、sort函數接受一個函數作為參數
- 三、sort函數接受簡化後的函數作為參數
- 四、數組中包含對象進行排序
sort的描述
描述sort
Array的
sort()
方法用于對原數組進行排序,不會産生新的數組,改變原數組。排序預設的規則是按照數組元素的字元編碼進行排序。預設按照字母順序升序排序,更準确地說是按照ASCII碼順序排序
如果要按照自己的意願對數組進行升序或者降序排序,就需要對sort傳入一個比較函數,該方法有兩個參數
a,b
進行比較,并且接收由兩個參數比較所得的結果
a>b
傳回值為1
a<b
傳回值-1
a=b
傳回值為0 。
一、sort函數的基本用法
let arr1 = ['b', 'g', 'a', 'd', 'c'];
console.log(arr1.sort()); // ["a", "b", "c", "d", "g"]
let arr2 = [5, 1, 8, 3];
console.log(arr2.sort()); // [1, 3, 5, 8]
二、sort函數接受一個函數作為參數
sort()方法中還可接受參數,參數為一個函數,用來指定按某種順序進行排列的函數。
該函數要比較兩個值,然後傳回一個用于說明這兩個值的相對順序的數字。凡是傳回1或者大于0的正數的時候這兩個值就要交換位置
升序排列
let arr1 = ['b', 'g', 'a', 'd', 'c'];
arr1.sort(function(a,) {
if(a > b) {
return 1; // 交換順序
} else {
return -1; // 順序不變
}
}) // ["a", "b", "c", "d", "g"]
降序排列
let arr2 = [5, 1, 8, 3];
arr2.sort(function(a,) {
if(a < b) {
return 1; // 交換順序
} else {
return -1; // 順序不變
}
}) // [8, 5, 3, 1]
這兩種就是對數組内容要不高的情況下,進行。
三、sort函數接受簡化後的函數作為參數
但是特别注意:
return a-b
;這種寫法隻适用于純數字内容,因為字母無法進行加減運算,那麼就可以通過這種方式來實作這個
return b.charCodeAt(0)-a.charCodeAt(0)
// 升序排列
if(a>b) {
return 1;
} else {
return -1;
}
// 簡化為:
return a-b;
// 降序排列簡化為
return b - a;
// 是以上述降序排列可寫為:
let arr2 = [5, 1, 8, 3];
arr2.sort(function(a,) {
return b - a;
}) // [8, 5, 3, 1]
//實作字元倒序
let arr = ['b', 'g', 'a', 'd', 'c'];
console.log(arr.sort((a,b)=>{
return b.charCodeAt(0)-a.charCodeAt(0)
// return b-a;不行
}));
四、數組中包含對象進行排序
分兩種情況:
第一種:我按照這個value值,也就是
字元值,但是這個字元值是數字
來排序
按理說需要擷取這個字元的ASCII碼值來做簡單的方式函數,但是
.log("3"-"1");隐式轉換為數字嘞,就不用這個轉換就直接可以
輸出2;
let objList1 = [{
name: 'a',
value: '1'
}, {
name: 'd',
value: '12'
}, {
name: 'b',
value: '11'
}, {
name: 'e',
value: '9'
}]
objList1.sort((a,) => {
return a.value-b.value
})
var obj = [{pid: 22, name: '阿肆', sex: '女'},{pid: 11, name: '阿牛', sex: '男'} ,{pid: 13, name: '阿牛', sex: '男'}]
obj.sort(function(a,b){
return a.pid-b.pid
})