天天看点

深度理解数组的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
})