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
原文地址:https://www.cnblogs.com/s-z-y/p/4439387.html