问题的产生原因:
在一篇阿里面试题的跟帖中,很多人应用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>