这段代码中,return a-b;是如何实现对数值大小进行排序的?谢谢

来源:7-22 数组排序sort()

胡瑞林

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>

写回答 关注

6回答

  • dong起来
    2016-06-18 02:28:13

    我来最后补充回答一下,首先要明白两点:

    1、关于sort(sortby)中的sort排序机制,也就是关于sortby函数作为sort()参数来指导sort()的排序方式,详情见 JavaScript sort() 方法 这是w3c的介绍,理解这个的重点就是这几句话:http://img.mukewang.com/5764369f0001654406000072.jpg

    换句话说就是: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了吧~~~

    cjy小靠谱

    请问一下 b - a 也是遵循 b < a , b排前面的规则,那输出的也应该是升序(我以为a,b就是一个符号而已,这种想法在这边是不是不适用?)

    2016-11-21 15:46:24

    共 1 条回复 >

  • 旧言虐心
    2016-01-28 17:43:46

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

  • mosci
    2015-12-11 15:38:10

    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 之后


  • sunyaox
    2015-12-11 15:28:25

    试试这个Arrays.sort();

  • 慕男婶
    2015-12-11 15:28:07

    具体怎么排序需要看看js引擎使用那种算法了(可以看浏览器源码或查相关的资料,反正我是不知道)。。

    你传入的这个函数只是告诉引擎规则,是升序?还是降序?

  • sunyaox
    2015-12-11 15:27:25
    1.myarr.sort(sortNum)是这个排序方法


JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468667 学习 · 21895 问题

查看课程

相似问题