Javascript中数组重排序方法详解

Posted msth

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; 

     }

 

 

    

 








以上是关于Javascript中数组重排序方法详解的主要内容,如果未能解决你的问题,请参考以下文章

数组重排序方法

NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段

JS中数组重排序方法

JS数组之重排序方法

数组重排序方法

JavaScript 字符串与数组互转,并保持数据去重排序功能