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

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

WingFrank

2016-04-12 17:43

学习中的例子如下:

<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,为何结果是不同的呢?

写回答 关注

4回答

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

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

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

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

    WingFr...

    对,懂了一点了,我觉得其实还有个对应关系,及a对应A,b对应B的关系,当sortNum(a,b),变成了sortNum(b,a),那么返回规则中的A和B也应该对换了,当时一直卡在规则这里没懂。谢谢。

    2016-04-20 11:22:04

    共 1 条回复 >

  • 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,能理解么?

    TheRed...

    他所用的应该不是已经封装好了的吧??如果是别人封装好了的函数的话,那应该是直接调用函数啊!!就像是调用length()函数一样,可是例子中,分明只用了定义函数的语句 function 啊

    2016-04-16 21:53:04

    共 1 条回复 >

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

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

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


JavaScript进阶篇

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

468194 学习 · 21891 问题

查看课程

相似问题