在数组中有两个可以用来直接排序的方法,分别是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; 

     }

 

 

    

 

最新文章

  1. Dell 服务器做Raid
  2. 记录我学github的路程(二)
  3. PHP 文件迭代器
  4. 4.接口隔离原则(Interface Segregation Principle)
  5. Annotation注解
  6. 关于JDBC中Class.forName的疑惑
  7. modelsim中的文件操作—— 大数据测试
  8. MVC 的 视图中 @section 是什么作用?
  9. jsp判断为空用not empty
  10. mysql5.6 主从复制
  11. 自己封装一个简单的ajax插件
  12. 自然语言处理中的自注意力机制(Self-attention Mechanism)
  13. AngularJS进阶(二十)HTML5实现获取地理位置信息并定位功能
  14. Vue实现移动端页面切换效果
  15. Listview自定义了子View导致listview的onitemclick事件无效
  16. css 文本两行显示,超出省略号表示
  17. PAT B1008 数组元素循环右移问题 (20 分)
  18. MySQL使用查询结果生成临时表
  19. flutter快速入门
  20. javascript的中的new

热门文章

  1. https 认证总结
  2. js遍历对象属性
  3. AdminLTE框架基础布局使用
  4. java操作Excel的poi的导出Excel表格
  5. tomcat8版本实现虚拟主机
  6. atcoder.keyence2019.contest E-Connecting Cities
  7. LINUX - .so 与 .a
  8. lucene7.1.0实现搜索文件内容
  9. malloc实现机制、缓冲机制、文件操作、mmap虚拟地址(day06)
  10. 进程映射、mmap(day05)