JavaScript-数组排序方法

发布于 2019-05-18  13 次阅读


在数组的排序中有一个叫sort的数组方法,无需自己定义排序算法

  • sort方法可以接收一个函数,这个函数可以接收两个参数
  • sort方法默认是升序排序
  • 升序和降序排序只需调换return 1和-1即可
  • 他们之间必须要一正一副,下面的代码是降序排序

如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。
如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前
注意点: 如果元素是字符串类型, 那么比较的是字符串的Unicode编码
sort() 方法用原地算法对数组的元素进行排序,并返回数组。排序算法现在是稳定的。默认排序顺序是根据字符串Unicode码点。
由于它取决于具体实现,因此无法保证排序的时间和空间复杂性。

let arr = ["c", "a", "b"];

arr.sort(function (a, b) {
            if(a > b){
                return -1;
            }else if(a < b){
                return 1;
            }else{
                return 0;
            }
        });
        console.log(arr);
  • 规律:如果数组中的元素是数值类型
  • 如果需要升序排序, 那么就返回a - b;
  • 如果需要降序排序, 那么就返回b - a;
let arr = [4,2,6,7,0,1,2];
    arr.sort(function (a,b) {
      return a -b;
    });
    console.log(arr);
  • 按照数组的元素长度来排序
  • 字符串是个特殊的数组,也有.length
    • 从短到长排序
let arr = ["1234","21","54321","123","6"];
    arr.sort(function (str1,str2) {
        //如果需要降序排序,长到短把str1和str2位置互换下就行了
      return str1.length - str2.length;
    });
    console.log(arr);
  • 按照每个对象年龄来升序降序排序
let students = [
      {name: "zs", age:34},
      {name: "ww", age:18},
      {name: "ls", age:21},
      {name: "mm", age:28}
    ];

    students.sort(function (a,b) {
      return a.age - b.age;
    });
    console.log(students);

改变思想才能改变我们的人生