• javascript中sort()排序方法总结


    1. 前言:

      一直以来,对sort()方法的使用都仅仅停留在array.sort()这一步,今天看了《javascript高级程序设计》第五章 5.2.5重排序方法这一节时,对sort()方法的相关介绍看的不太明白,因此决定对sort()方法进行深入的学习。下面是我学习的总结。

    2. 语法:

    array.sort(sortfunction)
    

    sortfunction:可选规定排序顺序。必须是函数。

    3. 不使用参数

      在不使用参数情况下,sort()方法按升序排列数组项。sort()方法会先调用每个数组项的toString()方法,然后按照字符编码的顺序进行排序

    实例 1

    <script>
         var arr = new Array('东方云游','阿红' ,'小明','a','B');
         arr.sort();
         console.log(arr); //["B", "a", "东方云游", "小明", "阿红"]
    </script>

    实例 2

    <script>
         var values = [0, 1, 3, 5, 7, 10, 15, 36];
         values.sort();
         console.log(values);//[0, 1, 10, 15, 3, 36, 5, 7] 
    </script>

      如实例2所示,即使字符串中的数值全部都是数字,但sort()方法也同样会按照转化为字符串之后的值进行比较。

     4. 使用参数

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

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

     实例3

    <script>
         function sortNum(a,b) {
             return a - b;
         }
         var values = [0, 1, 3, 5, 7, 10, 15, 36];
    values.sort(sortNum); console.log(values);
    //[0, 1, 3, 5, 7, 10, 15, 36] </script>

    如上在使用了sortNum函数之后,就可以返回正确的值了,如果想进行降序排列只需要 return b-a 就可以了。sortNum函数只能用于数值类型,或者valueOf()方法返回数值类型的对象类型。

    实例 4

    <script>
         function compare(x, y) {
             return x < y ? -1 : x > y ? 1 : 0;
         }
         var letters = ["L", "o", "V", "e"];
         letters.sort(compare);
         console.log(letters);//["L", "V", "e", "o"]  在字符编码中大写字母在小写字母前面
         var nums = [1, 3, 5, 8, 13, 46, ];
         nums.sort(compare);
         console.log(nums);//[1, 3, 5, 8, 13, 46]  
    </script>

    上例中的compare函数适用于大多数的数据类型。要降序的话只要把x<y改成x>y就行了。

    5. 多维数组

      如果a和b本身就是数组,这个时候我们就需要通过对它们内部的值比较来对数组进行排序了。

    实例 5

    <script>
         function sortArr(a, b) {
             return a[0] - b[0];
    }
    var students = [ [1, '东方云游'], [8, '乔布斯'], [4, '比尔盖茨'], [12, '马云'] ] students.sort(sortArr); </script>

    6. 多重比较

      当第一个比较值相等,但是我们还想进行再次区分的时候,可以使用第二比较值,并且比较的深度可以随着我们的需求扩展。

    实例 6

    <script>
         function sortArr(a, b) {
             if (a[0] == b[0]) {
                 return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0;
             }
             return a[0] - b[0];
         }
         var students = [
             [1, '东方云游'],
             [4, '乔布斯'],
             [4, '比尔盖茨'],
             [4, '马云']
         ]
         students.sort(sortArr);
    </script>

    如上例学生数组所示,当学号相同时,这我们就需要用学生的名字进行再次排序。

     7.  对象排序

      当比较的数据越来越复杂的时候,我们最好使用对象进行排序。这样我们就能够从代码上看出来是使用什么值来进行比较的了。

    <script>
         function compare(a, b) {
             return a.age - b.age
         }
         var employees = []
         employees[0] = { name: "George", age: 32, retiredate: "March 12, 2014" }
         employees[1] = { name: "Edward", age: 17, retiredate: "June 2, 2023" }
         employees[2] = { name: "Christine", age: 58, retiredate: "December 20, 2036" }
         employees[3] = { name: "Sarah", age: 62, retiredate: "April 30, 2020" }
         employees.sort(compare);
    </script>
  • 相关阅读:
    iScroll.js 用法参考
    行内元素和块级元素
    struct和typedef struct彻底明白了
    C/C++语法知识:typedef struct 用法详解
    不是技术牛人,如何拿到国内IT巨头的Offer (转载)
    笔试客观题-----每天收集一点点
    <C++Primer>第四版 阅读笔记 第一部分 “基本语言”
    <C++Primer>第四版 阅读笔记 第四部分 “面向对象编程与泛型编程”
    <C++Primer>第四版 阅读笔记 第三部分 “类和数据抽象”
    <C++Primer>第四版 阅读笔记 第二部分 “容器和算法”
  • 原文地址:https://www.cnblogs.com/qdlife/p/3461868.html
Copyright © 2020-2023  润新知