小结重排序方法reverse()、sort()

            今天继续总结一些其他的方法。我仔细回忆我从完全不懂JS到现在还在自学的这个过程,我回想当初看到JS真的是觉得几乎看不懂,上课的时候也觉得听的很吃力,对一些概念也很陌生。但是经过一段时间的沉淀,现在再看JS也似乎不那么可怕了,原先完全看不懂的一些概念似乎也不是不可攻破的。我体会到哪怕一个再难的概念,你一开始一定是很难吸收理解,但是你把这个概念隔段时间看个好几遍,我相信你一定会慢慢理解它的意思,而且一次比一次更深更清晰的理解。古人云,读书百遍,其义自见确实是有道理的。这是一些些自学路上自我体会的经验和感受在此记下,所以说很多东西还是要自己去尝试去体验才能悟出些什么,这些东西很宝贵,是通过时间,实践得来。

         言归正传,先小结下JS中的重排序方法。数组中已经存在两个可以直接用来重排序的方法:reverse()和sort()。

         reverse()方法会反转数组项的顺序,请看下面的例子         

<span style="font-size:18px;">var values=[1,2,3,4,5];
values.reverse();
alert(values);</span>

        但由于reverse()不够灵活,于是有了sort()方法。在默认情况下,sort()方法按升序排列数组项。为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到字符串,来确定如何排序。注意:即使数组中的每一项都是数值,sort()方法比较的也是字符串。如下所示:

<span style="font-size:18px;">var values=[0,1,5,10,15];
values.sort();
alert(values);    //0,1,10,15,5</span>
        因为这个方法比较的是字符串的大小而不是值的大小,所以这种排序方式也不是最佳的。因此sort()方法可以接受一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。

        比较函数接收两个参数,如果第一个参数应该位于第二个参数之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个之后则返回一个正数,以下就是一个简单的比较函数:

<span style="font-size:18px;">         function compare(value1,value2){
         if(value1<value2){
          return -1;
         }else if(value1>value2){
          return 1;
         }else{
          return 0;
          }
          }</span>

           这个比较函数可以适用于大多数数据函数,只要将其作为参数传递给sort()方法即可,如下面这个例子所示:

<span style="font-size:18px;">var values=[0,1,5,10,15];
values.sort(compare);
alert(values);</span>
           而通过交换比较函数返回的值可以产生降序的排序效果

 function compare(value1,value2){
      if(value1<value2){
         return -1;
         }else if(value1>value2){
         return 1;
         }else{
          return 0;
          }
          }
var values=[0,1,5,10,15];
values.sort(compare);
alert(values);  //15,10,5,1,0
         如果只想反转数组原来的顺序,使用reverse()方法更快一些。注意:reverse()和sort()方法的返回值是经过排序之后的数组。

          对于数值类型或者其valueOf()方法会返回数值类型的对象类型,可以使用一个更简单的比较函数。这个函数只要用第二个值减第一个值即可。

function compare(value1,value2){
   return value2-value1;
}

var values=[0,1,5,10,15];
values.sort(compare);
alert(values);
      

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值