• js中,sort()方法排序的4种写法-是否传参、是否多个属性值排序——array.sort(function(a,b))-a元素在前之a-b升序、b-a降序


    js中,sort()方法排序的4种写法-是否传参、是否多个属性值排序——array.sort(function(a,b))-a元素在前之a-b升序、b-a降序

    1、定义和用法

    sort() 方法用于对数组的元素进行排序,并返回数组。

    语法

    array.sort(fun);参数fun可选。规定排序顺序。必须是函数。

    • 注:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序

    • 排序顺序可以是字母或数字,并按升序或降序。

    • 默认排序顺序为按字母升序。

    如果想按照其他规则进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

    若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

    若 a 等于b,则返回 0。

    若 a 大于 b,则返回一个大于 0 的值。

    简单点就是:比较函数两个参数a和b,返回a-b 升序,返回b-a 降序

    • 注:是原数组发生改变
    实例1.1、不传参数

    不传参数,将不会按照数值大小排序,按照字符编码的顺序进行排序;

    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]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    实例1.2、传入参数

    传入参数,实现升序,降序;

    var arr3 = [30,10,111,37,1899,50,45];
    arr3.sort(function(a,b){
      return a - b;
    })
    console.log(arr3);//输出  [10, 30, 37, 45, 50, 111, 1899]
    
    var arr4 = [30,10,168,35,1899,50,45];
    arr4.sort(function(a,b){
      return b - a;
    })
    console.log(arr4);//输出 [1899, 168, 50, 45, 35, 30, 10]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    实例2.1、单属性排序——根据数组中的对象的某个属性值排序
    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}];
    
    • 1
    • 2
    • 3
    • 4
    • 5
    实例2.2、多条件排序——根据数组中的对象的多个属性值排序,多条件排序;
    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    效果

    在这里插入图片描述

    注意: 当数字是按字母顺序排列时"40"将排在"5"前面。

    使用数字排序,你必须通过一个函数作为参数来调用。

    函数指定数字是按照升序还是降序排列

    2、示例

    数组排序:可以看出,默认的排序方式是按照数组的首字母大小顺序

    var fruits = ["Banana", "Orange", "Apple", "Mango"];
    fruits.sort();  // ['Apple', 'Banana', 'Mango', 'Orange']
    
    • 1
    • 2

    但是如果是字母和数字一起排序呢?

    var fruits = ["Banana", "Orange", "Apple", "Mango", 1,  '1', 25, 1 ,0, '34'];
    fruits.sort(); //  [0, 1, '1', 1, 25, '34', 'Apple', 'Banana', 'Mango', 'Orange']
    
    • 1
    • 2

    根据运行的结果看出:数字的排序是优先于字母的

    字符串和数字的 1 之间的先后顺序是怎样的呢?我们打印结果看下属性。

    • 可以看出数字和字符串之间的1没有顺序优先级,只会按照数组中的先后顺序排列。
    3、升序降序排列

    sort() 方法,有一个可选参数,必须是函数,供它调用。

    回调函数的参数要有两个:第2个参数的元素肯定在第1个参数的元素前面!

    这个方法的排序是看回调函数的返回值

    • 如果返回值大于 0,则位置互换

    • 如果返回值小于 0,则位置不变

    第一次比较:7>9,结果为 false,即 return -1,此时 a 会换到 b 前面,即 7 在 9 之前,所以位置互换。

    var arr = [9,7,2];
    arr.sort(function(a,b){
        if(a>b) // 如果 a 大于 b,位置互换
            return 1;
        else //否则,位置不变
            return -1;
    });
    // 排序结果: 2,7,9
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这是官方给出的升序排列,降序反之。

    var points = [40,100,1,5,25,10];
    points.sort(function(a,b){return a-b});
    //排序结果: 1,5,10,25,40,100
    
    • 1
    • 2
    • 3

    去重升序:

    Set()方法得到一个去重数组。

    var arr = [23,9,54,658,45,57,9,23,4,5,6,4,5] // 重复 5 9
    var s = new Set(arr)
    s = [...s]
    s.sort((a,b)=>(a-b))  // a > b 升序
    console.log(s)  // [ 4, 5, 6, 9, 23, 45, 57, 54, 658 ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    别再用 System.currentTimeMillis 统计耗时了,太 Low,试试 Spring Boot 源码在用的 StopWatch吧,够优雅!
    Aptos 生态 18 个精选项目最新梳理(附交互策略)
    什么是高可用服务?
    HTML5 新增的input 表单属性
    【二分法】
    K8S安全学习
    tensorflow QAT
    ES6介绍
    网络编程套接字socket
    Danielle Foré 近日向 9to5Linux 通报了 elementary OS 7.1 的发布和全面可用性
  • 原文地址:https://blog.csdn.net/weixin_44867717/article/details/126602506