Javascript中数组重排序方法详解

  在数组中有两个可以用来直接排序的方法,分别是reverse()和sort()。下面通过本文给大家详细介绍,对js 数组重排序相关知识感兴趣的朋友一起看看吧。

  1.数组中已存在两个可直接用来重排序的方法:reverse()和sort()。

    reverse()和sort()方法的返回值是经过排序后的数组。reverse()方法会反转数组项的顺序:

    var values = [1,2,3,4,5];

    values.reverse();

    alert(values);//5,4,3,2,1

   这种方法的作用就是翻转数组,虽然效果直观但是不够灵活。

   在默认情况下,sort()方法按升序排列数组,sort()方法会调用每个数组项的toString()转型方法,然后比较得到字符串,确定如何排序。即使数组中的每一项都是数值,sort()方法比较的也是字符串:

    var values = [0,1,5,10,15];

    values.sort();

    alert(values);//0,1,10,15,5

    为什么数组 [0,1,5,10,15].sort() 之后的结果是 0,1,10,15,5,而不是期待的 0,1,5,10,15这是因为 sort 方法默认(即没有compare函数)按照数组元素对应的字符串的 Unicode 从小到大进行排序。也就是说,上面的结果中5排在10,15后面,是因为 '5' 比 '10','15'大。你现在就可以按F12打开console,输入下面的代码

    '5' > '10'

    结果应该是true。这说明,字符串 '5' 比 '10' 大,所以它排在后面。

    为了解决这个问题,我们可以设置一个函数compare,compare函数只是指定了 排序策略 ,sort 会根据这个策略来排序。 至于怎么调换位置,怎么生成最后的结果,那是sort的事情。这里其实是一个常见的设计模式,策略模式,有兴趣可以去了解一下。下面我们来看compare的具体实现: 

    function compare(value1,value2){
      if (value1 < value2){
      return -1;
      }else if (value1 > value2){
      return 1;
      }else{
      return 0;
      }
    }

    最后将这个比较函数传递给sort()方法就实现了正确的升序排序,当然也可以实现降序排序,这里就不说明了,原理一样,下面我们看具体排序的实现:

    var values = [0,1,5,10,15];

    values.sort(compare);

    alert(values);//0,1,5,10,15  

    sort(compare)函数的排序条件是:

    参数大于0,数组的相邻两个元素交换位置;

    参数小于0,数组的相邻两个元素不交换位置;

    参数等于0,数组的相邻两个元素大小相等;所以compare自定义函数必须返回一个数值。

   2.对于数值类型或者valueOf()方法会返回数值类型的对象类型。

    可使用一个更简单的比较函数。此函数只要第二个值减第一个值即可。

     function compare(v1,v2){

     return v2-v1; 

     }

 

 

    

 

转载于:https://www.cnblogs.com/msth/p/8890780.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值