zoukankan      html  css  js  c++  java
  • JS中数组的sort()排序

    https://blog.csdn.net/NinthSea/article/details/72879364

    1.sort() 方法的带参和无参调用:
    sort()方法对数组元素进行排序,参数可选。返回一个数组的引用,不会创建新的数组对象而是将原数组改变成排序后的数组。

    • 无参调用:
      如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串以便进行比较。如果数组元素是数字的话会得到错的结果,这时需要使用有参的方法。
    • 带参调用:
      如果想要自己规定排序方式,就需要在sort()方法中提供一个比较函数,该函数要比较两个值即有两个形参a 和 b,函数执行时浏览器会将数组中的元素依次作为实参传入,返回一个用于说明这两个值的相对顺序的数字。sort()方法会根据函数返回值来进行数组元素的交换。返回值如下:

       若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
       若 a 等于 b,则返回 0。
       若a 大于 b,则返回一个大于 0 的值。 
      
       换句话说,当函数返回值小于0时,a与b的顺序不变;返回值为0时,则表示两数相等,顺序也不变;返回值大于0时,a与b交换位置。
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      2.sort(sortby)方法的排序函数sortby();

    • 常用的一些排序函数:

    <script type="text/javascript">
    
            //排序函数
                function compare(a,b){
                    if(a>b){
                        return 1; //sort()中参数大于0,交换a b顺序,升序排列
                    }else if(a<b){
                        return -1;  //sort()中参数小于0,a b顺序不变,升序排列
                    }
                }
    
                var arr = [2,0,6,3,8];
                var newArr = arr.sort(compare);  //此处调用比较函数,并将其返回值作为sort方法参数
                document.write("升序排列后的数组为:"+newArr);
            </script>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    上边是很简单的一个比较函数,是按升序排列的,如果要按降序排列,只要将返回值进行交换即可。

    下边这个和上边函数实现的功能一样,只是写法不一样:

    <script type="text/javascript">
    
                function compare(a,b){
                    return a-b;  //如果a>b,返回值大于0,交换a b,升序排列
                    //return b-a; 如果b-a大于0,即b大于a则交换,较大的b 在前,降序排列 
                }
    
                var arr = [2,1,3,4,0];
                var newArr = arr.sort(compare);
    
                document.write("升序排列后的数组:"+newArr);
            </script>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    以上两种只是排序函数中最简单常用的,都可以将数组中的元素排序。
    下面的函数可以将元素按先奇后偶排序:
    要将元素按照先奇后偶的顺序排列,则a b交换的条件为a是偶数b是奇数且a>b。有了排序的条件,就可以很容易写出比较函数。

    <script type="text/javascript">
    
                function compare(a,b){
                    if(a%2==0 && b%2==1){
                        return 1;  //1.对偶数和奇数排序,先将全部奇数放在前边,偶数放在后边
                    }
                    if((a%2==1 && b%2==1 || a%2==0 && b%2==0 )&& a>b){
                        return 1; //2.分别对奇数和偶数进行从小到大的顺序排序
                    }
    
    
                }
    
                var arr = [2,1,3,4,0];
                var newArr = arr.sort(compare);
    
                document.write("升序排列后的数组:"+newArr);
            </script>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    排序结果为 1,3,0,2,4 
    
    • 1
    • 2

    最后一种是对字符数组进行不区分大小写将其按照Unicode 编码从大到小排列:
    var arr = [A,b,a,B];
    要实现这种排序的比较函数的条件为:当a.toString().toLowerCase()

    <script type="text/javascript">
                var arr = ["a","A","B","C","b"];
                function compare(a,b){
                    if(a.toString().toLowerCase() < b.toString().toLowerCase()){
                        return -1;
                    }else{
                        return 1; //按编码从小到大排列
                    }
                }
                var newArr = arr.sort(compare);
                document.write(newArr);
            </script>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    a.toString()方法会返回 a的字符串表达形式 “a”.
    如果 a 是一个变量存储的为一个Number型数值 2,则 a.toString()方法会返回 该数值的字符串表达形式 “2”;
    此处Array的toString()方法和类的toString()方法不同,Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。Arrays的toString方法是返回指定数组内容的字符串表示形式。

    3.对sort(sortby)方法的理解:
    sort()方法主要依靠其回调函数来进行排序,回调函数中需要两个参数,在执行sort()方法时会调用回调函数,这时会将调用sort()方法的数组中的元素作为实参两两依次作为回调函数实参传入,通过回调函数的条件进行比较得出一个返回值,将返回值作为sort()函数的参数来判断是否交换。
    所以回调函数规定了排序的条件以及进行排序,而sort()方法是根据这个条件进行交换。所以sort()函数只执行一次,回调函数会依次两两传入实参。

  • 相关阅读:
    晚上打死个老鼠
    今早服务器出现的问题
    打球
    出于对Atlas自带AutoCompleteBehavior的不满,自定义了一个支持模版的AutoCompleteBehavior
    PetShop4.0项目分解
    WebSnapr-生成你的网站缩略图
    Lost HTML Intellisense within ASP.NET AJAX Controls
    调整调出输入法的顺序
    儿童网址大全
    gridview列 数字、货币和日期 显示格式
  • 原文地址:https://www.cnblogs.com/kevoin/p/9483135.html
Copyright © 2011-2022 走看看