• javascript深度理解数组的sort()排序


    sort的描述

    描述sort

    Array的sort()方法用于对原数组进行排序,不会产生新的数组,改变原数组。排序默认的规则是按照数组元素的字符编码进行排序。默认按照字母顺序升序排序,更准确地说是按照ASCII码顺序排序
    如果要按照自己的意愿对数组进行升序或者降序排序,就需要对sort传入一个比较函数,该方法有两个参数a,b进行比较,并且接收由两个参数比较所得的结果 a>b 返回值为1 a 返回值-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]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    二、sort函数接受一个函数作为参数

    sort()方法中还可接受参数,参数为一个函数,用来指定按某种顺序进行排列的函数。
    该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。凡是返回1或者大于0的正数的时候这两个值就要交换位置

    升序排列

    let arr1 = ['b', 'g', 'a', 'd', 'c'];
    arr1.sort(function(a, b) {
    	if(a > b) {
    		return 1; // 交换顺序
    	} else {
    		return -1; // 顺序不变
    	}
    }) // ["a", "b", "c", "d", "g"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    降序排列

    let arr2 = [5, 1, 8, 3];
    arr2.sort(function(a, b) {
    	if(a < b) {
    		return 1; // 交换顺序
    	} else {
    		return -1; // 顺序不变
    	}
    }) // [8, 5, 3, 1]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这两种就是对数组内容要不高的情况下,进行。

    三、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, b) {
    	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;不行
    }));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    四、数组中包含对象进行排序

    分两种情况:


    第一种:我按照这个value值,也就是字符值,但是这个字符值是数字来排序
    按理说需要获取这个字符的ASCII码值来做简单的方式函数,但是

     console.log("3"-"1");隐式转换为数字嘞,就不用这个转换就直接可以
     输出2
    • 1
    • 2
    let objList1 = [{
                name: 'a',
                value: '1'
            }, {
                name: 'd',
                value: '12'
            }, {
                name: 'b',
                value: '11'
            }, {
                name: 'e',
                value: '9'
            }]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    那么就可以这么写:

    objList1.sort((a, b) => {
        return a.value-b.value
    })
    
    • 1
    • 2
    • 3

    第二种:
    我按照这个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
    })
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    IBM HTTP Server ( IHS服务器)SSL证书安装教程
    Oracle怎么看正在运行的sql
    6.7-7.2 读书笔记
    记录--`ElementUI` 中的奇技淫巧
    吹爆,这份有思路有案例能落地的SpringCloud开发笔记
    【图像分类】MMPretrain训练ImageNet格式自定义数据集
    vue一个页面同时添加两个mars-dialog对话框时,关闭按钮失效处理
    Leetcode 01-算法入门与数组-②数组基础
    奥特曼与钢铁侠【InsCode Stable Diffusion美图活动一期】
    flutter系列之:在flutter中使用媒体播放器
  • 原文地址:https://blog.csdn.net/m0_46672781/article/details/126336317