• sort排序中的坑


    问题的产生原因: 

     在一篇阿里面试题的跟帖中,很多人应用sort()方法对数组进行排序。看似合情合理的代码,运行结果却频频出错。为什么呢?因为很多人都忽略掉了一点,那就是sort()排序默认情况下是按ASCII字母顺序排序的,而并不是按照我们想当然的数字大小排序。

    问题的产生:

      比如我们利用sort()对数组[-12,3,6,5,100]进行升序排列,那么结果是什么呢?[-12,100,3,5,6]。对数组[-12,10,3,6,5]进行升序排列呢?答案是[-12,10,3,5,6].对数组[-12,70,3,5,6]进行排序呢?这次结果就等同于数据大小排列了[-12,3,5,6,70]。

    解决方法:

      虽然sort()不按数字大小排序,不过向来是上有计策,下有对策,我们可以通过改变默认的sort行为(按字符排列),自行指定排序规则函数:

    比如:arr.sort(function(a,b){return a-b;});(从小到大排列)arr.sort(function(a,b){return b-a;});(从大到小排列)

    还有一些排序规则函数比如arr.sort(function(a,b){return a>b?1:-1})(从小到大排序)arr.sort(function(a,b){return a>b?1:-1})(从大到小排列)

    具体代码如下:

     1 <!DOCTYPE html>
     2 <html>
     3 <head lang="en">
     4     <meta charset="UTF-8">
     5     <title></title>
     6     <script type="text/javascript">
     7        
     8          var arr = new Array            ("abbbbbbb","bcccc","dhacker","efff","fjjj","","ghhh","hoo");
     9          arr.sort();
    10          for (var i = 0; i < arr.length; i++) {
    11              document.writeln(arr[i]);
    12          }
    13 
    14          var numArr = new Array(12,23,100,4,23,34,2,-15);
    15         // numArr.sort(function compare(a,b){return a-b;});
    16          numArr.sort(function(a,b){return a>b?-1:1})
    17 
    18          for (var i = 0; i<numArr.length; i++) {
    19              document.write(numArr[i] +"<br>");
    20          }
    21 
    22     alert(numArr);
    23 
    24     </script>>
    25 
    26 </head>
    27 <body>
    28 
    29 </body>
    30 </html> 

      

      

      

    欢迎关注微信公众号:“花栗鼠的红松树” 知乎专栏:“花栗鼠的红松树” 知乎: 卓怡 https://www.zhihu.com/people/zhuoyisun/activities
  • 相关阅读:
    转:桩模块 stub 和驱动模块 driver
    音频中PCM的概念
    pthread_exit
    为什么匿名内部类参数必须为final类型
    原创:同步与异步、阻塞与非阻塞
    (转)C语言中长度为0的数组
    编码问题
    查看Android程序使用内存
    C++中class与struct的区别(struct的类型名同时可以作为变量名)
    asn1c
  • 原文地址:https://www.cnblogs.com/s-z-y/p/4439387.html
Copyright © 2020-2023  润新知