胡瑞林
2015-12-11 15:21
<script type="text/javascript">
function sortNum(a,b) {
return a - b;
//升序,如降序,把“a - b”该成“b - a”
}
var myarr = new Array("80","16","50","6","100","1");
document.write(myarr + "<br>");
document.write(myarr.sort(sortNum));
</script>
我来最后补充回答一下,首先要明白两点:
1、关于sort(sortby)中的sort排序机制,也就是关于sortby函数作为sort()参数来指导sort()的排序方式,详情见 JavaScript sort() 方法 这是w3c的介绍,理解这个的重点就是这几句话:
换句话说就是:1.返回值小于0,a,b在数组中顺序不变
2.返回值小于0,a,b在数组中顺序不变,(变不变有什么区别呢 - -!)
3.返回值大于0,a,b在数组中顺序交换
*请注意上面几行是排序的规定,就像1+1=2一样,是 javascript约定俗成的规定!!!!!
2、排序方法sort()中的执行过程(算法问题)不必深究,我的理解是以循环比较的方式排列出来了,你只要明白计算机使出浑身解数以你制定的规则(sortby)循环比较,把你想要的排列展现出来了。
--------------------------------------分割线------------分割线------------------------------------------------------
eg:那么在这段代码中 我来以 return a-b 为什么是升序为例来解释一下
<script type="text/javascript">
function sortNum(a,b) {
return a - b;
var arr = [1,11,3,4,5];
alert(arr.sort(sortNum)); //[1,3,4,5,11]
</script>
当开始排序的时候,
首先把a=1和b=11作为参数传到sortNum(a,b)中,由于1-11<0,按照规定中的第1条,1,11在数组中顺序不变;
……此处省略中间相似循环比较……
在排序到了数值11的时候,举例11和3比较,把a=11和b=3作为参数传数sortNum(a,b)中,由于11-3>0,按照规定中的第3条,排序后,11和3交换位置。
这样在经历了不知道多少次的循环比较之后,数组的输出就变成了[1,3,4,5,11],也就是我们理解的升序排列,同理可以理解b-a了吧~~~
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
function sortNum() 返回的是 a减b的值
myarr.sort(sortNum)相当于myarr.sort(a-b)
a-b<=-1,则表示 A 在排序后的序列中出现在 B 之前。
a-b>-1 && <1,则表示 A 和 B 具有相同的排序顺序。
a-b>=1,则表示 A 在排序后的序列中出现在 B 之后
试试这个Arrays.sort();
具体怎么排序需要看看js引擎使用那种算法了(可以看浏览器源码或查相关的资料,反正我是不知道)。。
你传入的这个函数只是告诉引擎规则,是升序?还是降序?
1.myarr.sort(sortNum)是这个排序方法
JavaScript进阶篇
468667 学习 · 21895 问题
相似问题