js中数组的sort()方法排序

                                            js中数组的sort()方法排序


一.sort()方法带参和无参调用

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交换位置。
    

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

二.sort()方法应用举例

例一.

<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>

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

例二.

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

<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>

以上两种只是排序函数中最简单常用的,都可以将数组中的元素排序。 

例三.


下面的函数可以将元素按先奇后偶排序: 
要将元素按照先奇后偶的顺序排列,则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,3,0,2,4 

例四.

最后一种是对字符数组进行不区分大小写将其按照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>

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

三.对sort(sortby)方法的理解: 


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

以上是关于JS中sort函数的小结,后续遇到新的问题再继续更新!

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值