这大晚上的,明天还要码地,废话就不多说了,因为无意(-. -)看见了有不少同学问关于数组排序的问题,也有不少同学给出了很好的解答,给了我不少启发,感谢大家对我(-_ -)的帮助.另外感谢@xuexiphpa同学在js数组中的排序问题中给的推荐.
关于数组排序的sort()方法(不带参数):
<script type="text/javascript">
var arr=["a","c","e","d","b"];
var arr2=[1,20,15,30,6]
doucment.write(arr.sort());
doucment.write(arr2.sort());
</script>
那么上面的输出结果是什么呢?
arr.sort()输出结果:a,b,c,d,e
arr2.sort()输出结果:1,15,20,30,6
为什么是这样的结果呢?
在不带参数的情况下sort()方法默认会将数组元素当作string类型来升序排序,根据它们的unicode码从小到大依次排列.
我们先用charCodeAt获得一下它们的unicode值:
元素 unicode
1 49
15 49 53
20 50 48
30 51 48
6 54
首先比较第一位的大小,相同的话比较第二位的unicode值的大小,所以就得出arr2的输出结果.
关于数组排序的sort(compareFun)方法(带参数):
<script type="text/javascript">
var arr2=[1,20,15,30,6]
doucment.write(arr2.sort(function(a,b){return a-b;}));
</script>
输出结果:1,6,15,20,30
为什么呢?查手册我们知道
a-b<0 a将会放在b前面 //a<b
a-b=0 a,b的位置不改变
a-b>0 b将会放在a前面 //a>b
这里a,b是数组内相邻的元素依次进行比较,比较结果按照上述规则调整位置,所以总是数值小的元素排在前面,即升序排列.
同样,如果要降序排序的话,doucment.write(arr2.sort(function(a,b){return b-a;}));按照上述规则就变成了:
-(a-b)>0=>b-a>0=>b>a b将会放在a前面
a-b=0 a,b的位置不改变
-(a-b)<0=>b-a<0=>b<a a将会放在b前面
注意:影响排序方式的是sort(compareFun(){return result;})参数返回结果与0的比较关系,至于(a-b)或是(b-a)它们是怎么被sort()识别判断而后又运算出结果的,看这里
functin sort(functin(a,b){return result;}) {
Native Code;
}
从上述可以看出,对单纯的字符串(String)数组升序排序的话,sort()方法(无参数)比较适合;而在(Number)数组比较排序的时候,sort(compareFun)(带参数)更合适。
简单示意一下原理:
<script type="text/javascript">
function ascSort(){
for (var i=0; i<this.length; i++){
for(var j=0;j<this.length-i; j++){
if(this[j]>this[j+1]){/*改成<就是降序*/
var transferDate=this[j];
this[j]=this[j+1];
this[j+1]=transferDate;
}
}
}
return this;
}
Array.prototype.ascSort=ascSort;
var arr2=[1,20,15,30,6];
document.write(arr2.ascSort());
</script>
关于这个问题,还请大家多指教,晚安!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。