问答详情
源自:7-22 数组排序sort()

为何a-b和b-a不一样?

学习中的例子如下:

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

为何return a-b就是升序,而b-a就是降序,比较函数时,无论a-b还是b-a都只是两个参数,从数学角度,我可以把b看作a,把a看作b,为何结果是不同的呢?

提问者:WingFrank 2016-04-12 17:43

个回答

  • qq_橘子先生_0
    2016-04-17 17:26:42

    该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下: 

      若返回值<=-1,则表示 A 在排序后的序列中出现在 B 之前。
      若返回值>-1 && <1,则表示 A 和 B 具有相同的排序顺序。
      若返回值>=1,则表示 A 在排序后的序列中出现在 B 之后

    好好看下这个,就能理解了

  • TheRedWolf
    2016-04-16 21:58:17

    我对于例子是这样理解的:       因为a-b的值就是sort函数的参数,当参数<=-1时,,就表示在unicode表中a在b之前,所以sort函数自动将a,b降序排列

  • 如我这般
    2016-04-12 18:19:06

    虽然从数学的角度说没错,但是你用的是人家已经封装好了的sortNum函数,函数内部将a和b定顺序了,a-b和b-a不能等同。可以类比为a1-a2和a2-a1,你那种是忽略顺序,相当于a-a和b-b,能理解么?

  • 吴厚
    2016-04-12 18:17:11

    该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下: 

      若返回值<=-1,则表示 A 在排序后的序列中出现在 B 之前。
      若返回值>-1 && <1,则表示 A 和 B 具有相同的排序顺序。
      若返回值>=1,则表示 A 在排序后的序列中出现在 B 之后