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

为什么return a-b可以决定升降序?

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Array对象 </title>

<script type="text/javascript">

   function sortNum(a,b) {

    return a-b;

   }

var myarr = new Array("80","16","50","6","100","1");

document.write(myarr.sort(sortNum));

</script>

</head>

<body>

</body>

</html>


还有就是document.write(myarr.sort(sortNum));与document.write(myarr.sort(sortNum()));的区别,求大牛解释

正在回答

5 回答

权威指南上的定义希望能帮到你·~http://img1.sycdn.imooc.com//57a587d500017fba24482448.jpg

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

这个函数的定义:myArray.sort(sortMethod);

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

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

按照定义:

若a-b<=-1即b-a>1 ,排序为AB(B较大)

   a-b>=1  则排序为BA (A较大)

也就是说较大的排在后面。。升序。。反之,b-a为降序。。。



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

乘蓄媛z 提问者

抱歉,不是很能理解
2016-08-05 回复 有任何疑惑可以回复我~
#2

逆风之夏

按照你的理论 若b-a<=-1即a-b>1 ,排序为ba(a较大) b-a>=1 则排序为ab(b较大) b-a还是升序啊!!!
2016-08-06 回复 有任何疑惑可以回复我~
#3

Yuuyu 回复 逆风之夏

ab只是变量符号,本身无具体的值。主要是function(a,b)这里的顺序a在前面哦,定义的返回值也是根据这个来的,如果function(a,b) 返回的是b-a的话,也就是b-a=-(a-b)。建议你看定义,定义就是这么定义的啊。不是我说的
2016-08-06 回复 有任何疑惑可以回复我~
#4

Yuuyu 回复 逆风之夏

我把书上的定义放在评论了 你看看能不能理解~
2016-08-06 回复 有任何疑惑可以回复我~
查看1条回复

你是不是想问有没有括号的区别?我觉得是这样,sort()里面调用的是方法而不是属性,就像array.length中length是属性,所以不需要加括号,而mystr.toUpperCase()中toUpperCase()是方法名,所以调用时需要加上括号。这里同理,你在script中写的是"function sortNum()",可见sortNum()被定义为一个方法,那么调用该方法时就应该加上括号,才是完整的方法名~不知道我说的是不是你要的~

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

乘蓄媛z 提问者

在这里有这个括号和没这个括号结果是相差很大的,所以想搞懂
2016-08-04 回复 有任何疑惑可以回复我~

我认为,不是说function(a,b)在排序,排序的还是sort()函数,function(a,b)只是给一个排序的依据,而return a-b就是一种最常见的排序依据——按从小到大排。至于为什么,首先这是一个方法,就像定时器一样的方法,js就是这么设定的,我也不知道。

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

可以这样理解,不要理解成a减b的意思,理解成在26个字母中a到b的意思,在26个字母中b比a大,所以写成a-b就是升序,写成b-a就是降序。

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

金云泽

还是这种理解比较靠谱也更容易记忆。
2018-11-19 回复 有任何疑惑可以回复我~
#2

Rvie

太棒了
2019-03-16 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么return a-b可以决定升降序?

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