为了账号安全,请及时绑定邮箱和手机立即绑定

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

正在回答

4 回答

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

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

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

0 回复 有任何疑惑可以回复我~
#1

WingFrank 提问者

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

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

TheRedWolf

他所用的应该不是已经封装好了的吧??如果是别人封装好了的函数的话,那应该是直接调用函数啊!!就像是调用length()函数一样,可是例子中,分明只用了定义函数的语句 function 啊
2016-04-16 回复 有任何疑惑可以回复我~

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

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


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信