亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于數組排序sort()

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

如上代碼,是基于什么原理將數組排序的呢?

正在回答

5 回答

理解:

document.write(myarr.sort(sortNum))此行的意思是myarr.sort()按照sortNum兩兩比較進行排序。

因為?arrayObject.sort(方法函數) 按照按unicode碼順序排列,而unicode碼下 a > b ,

疑問:

?那么return a-b; 結果為真還是為假,??函數?sortNum?返回值是a還是b?


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

因為本身a>b。不信你把a,b換成e,f或者m,o,會是一樣的

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

可以這樣來理解,不一定科學正常,但是有助于理解。

JS自動排序,結果一下子就出來了,為了方便理解,我們可以把這個JS運算過程放慢一些,過程分解成很多小的步驟。

就以此問題中的數字排序為例。

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

要將這代碼中的數字排序,就要用到排序函數,而排序函數只對2個字進行比較。為了達成排序目的,程序就自動地把數組里的所有2個字都進行了【a-b】的操作。

  1. 首先,把第1位數“80”當作a,把其它數字當作b,此時,要完成的操作有80-16,80-5,80-6,80-100,80-1。經過這一輪排序后,初步排序結果基本上是16,50,6,1,80,100。因為還有數沒有進行兩兩相減進行比較,所以還要繼續進行下面的操作。

  2. 現在,把第2位數“16”當作a,把其它數當作b, 此時,要完成的操作有16-50,16-6,16-100,16-1。這次的排序結果,在上一輪結果上再進行比較排序,改正其中幾個不對的。現在的排序結果初步是6,1,16,50,80,100。

  3. 同理,接下來,其它所有的數繼續進行【a-b】的操作,直到所有的數都進行了兩兩比較。最后,排序結果也一步步修正得到了最終的結果。

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

慕婉清7712429

我覺得是不是只要循環比較一遍就可以了,把第一位當做A,其余的當做B,最后結果出來的順序不是最后答案嗎?
2018-07-11 回復 有任何疑惑可以回復我~
#2

慕婉清7712429

我覺得是不是只要循環比較一遍就可以了,把第一位當做A,其余的當做B,最后結果出來的順序不是最后答案嗎?,因為我真的計算了下,無論是把第一位當做A還是依次把剩下的幾位當做A,最后的值按照從小到大來算,都是1,6,16,50,80,100,所以只要比較一次就可以了吧你回答中的答案絕對算錯了
2018-07-11 回復 有任何疑惑可以回復我~
#3

PaulPierce

老哥 你認真再排排看?
2018-12-28 回復 有任何疑惑可以回復我~

他是怎么把參數傳到這個sortNum()函數里面的那?

1 回復 有任何疑惑可以回復我~

通過兩數相減是大于0還是小于0判斷兩數大小從而排序

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

舉報

0/150
提交
取消
JavaScript進階篇
  • 參與學習       468831    人
  • 解答問題       22582    個

本課程從如何插入JS代碼開始,帶您進入網頁動態交互世界

進入課程

關于數組排序sort()

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號