天天看點

深度了解數組的sort()排序

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
})