溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

es6中數(shù)組怎么排序

發(fā)布時間:2022-04-12 10:09:05 來源:億速云 閱讀:4424 作者:iii 欄目:web開發(fā)

這篇文章主要講解了“es6中數(shù)組怎么排序”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“es6中數(shù)組怎么排序”吧!

es6數(shù)組的排序方法是“sort()”。sort()方法用于對數(shù)組的元素進(jìn)行排序,排序順序可以是字母或數(shù)字,并按升序或降序,默認(rèn)按字母升序;該方法有一個可選參數(shù),此參數(shù)必須是函數(shù),語法“array.sort(callback(a,b))”。

本教程操作環(huán)境:windows7系統(tǒng)、ECMAScript 6版、Dell G3電腦。

sort() 方法用于對數(shù)組的元素進(jìn)行排序。

  • 排序順序可以是字母或數(shù)字,并按升序或降序。

  • 默認(rèn)排序順序?yàn)榘醋帜干颉?/p>

其中,sort()方法有一個可選參數(shù)。但是,此參數(shù)必須是函數(shù)。 數(shù)組在調(diào)用 sort()方法時,如果沒有傳參將按字母順序(字符編碼順序)對數(shù)組中的元素進(jìn)行排序,如果想按照其他標(biāo)準(zhǔn)進(jìn)行排序,就需要進(jìn)行傳一個參數(shù)且為函數(shù),該函數(shù)要比較兩個值,并且會返回一個用于說明這兩個值的相對順序的數(shù)字。

語法:

array.sort(callback(a,b))
參數(shù)描述
callback(a,b)

可選。規(guī)定排序順序。必須是函數(shù)。

返回值:Array類型,是對數(shù)組的引用。請注意,數(shù)組在原數(shù)組上進(jìn)行排序,不生成副本。

示例:

 //sort的基本使用
  let arr = [8, 1, 4, 3, 7, 9]
  let Arr = [21, 55, 29, 105, 45]
  console.log(arr.sort()) //[1, 3, 4, 7, 8, 9]
  console.log(Arr.sort()) // [105, 21, 29, 45, 55]

es6中數(shù)組怎么排序

由上述代碼可知:sort()方法只能對0-9以內(nèi)的數(shù)組進(jìn)行正確排序,兩位數(shù)以上的數(shù)組項(xiàng)雖然給出了返回值,但卻并不是排序后的結(jié)果。這是因?yàn)閟ort()是內(nèi)部做的是根據(jù)ASCLL碼進(jìn)行排序的,并不是根據(jù)數(shù)值大小排序。那這個方法連兩位數(shù)以上的數(shù)字都無法進(jìn)行正規(guī)排序處理,跟咸魚有什么區(qū)別呢?

重點(diǎn)來了:sort()可以接收一個攜帶兩個形參的callback(a,b),即a、b是兩個即將要比較大小的元素,且必須要有返回值。

  • 當(dāng)callback的返回值是正數(shù)時、那么 b 會被排列到 a 之前;

  • 當(dāng)callback的返回值是負(fù)數(shù)時、那么 a 會被排列到 b 之前;

  • 當(dāng)callback的返回值是為 0 時、那么 a 與 b 的位置保持不變;

  • sort每執(zhí)行一次會根據(jù)返回值調(diào)換兩個參數(shù)a、b在原數(shù)組中的位置;

看完上面的描述你會很蒙圈,你一定會問返回值在哪?參數(shù) a b 的實(shí)參是誰?這些當(dāng)你看懂下面代碼之后統(tǒng)統(tǒng)小兒科!

 //sort 內(nèi)部寫法
  let Arr = [56, 21, 29, 105, 45]
  Arr.sort(function(a, b) { //callback
      if (a > b) { // a b 分別是Arr中的 56 21
          return 1  //返回正數(shù) ,b排列在a之前
      } else {
          return -1 //返回負(fù)數(shù) ,a排列在b之前
      }
  })
  console.log(Arr) //[21, 29, 45, 55, 105]

執(zhí)行邏輯:

es6中數(shù)組怎么排序

需要注意的是callback( a , b )接收的兩個參數(shù)分別是a = > 當(dāng)前項(xiàng)、b當(dāng)前項(xiàng)的下一項(xiàng),若當(dāng)前項(xiàng)與下一項(xiàng)位置不變時,b為下一項(xiàng)索引-1;判斷遍歷結(jié)束的條件是b參數(shù)取不到值 即結(jié)束,舉例上述代碼中第三輪第二次執(zhí)行時 當(dāng)前項(xiàng)的索引是3 那么b為下一項(xiàng),即4 數(shù)組中取不到第4項(xiàng),不滿足繼續(xù)遍歷條件,結(jié)束遍歷!

談?wù)劮祷刂担荷鲜龃a寫的返回值 1 與 -1 只是象征性的代表 1為正數(shù) -1為負(fù)數(shù),不論你代碼寫什么返回值,sort內(nèi)部只會去判斷你的返回值是正數(shù)還是負(fù)數(shù),哪怕等式成立返回100 不成立返回-10000都是可行的。

解釋簡寫方式:

es6中數(shù)組怎么排序

//簡寫 最終版  
  let Arr = [56, 21, 88, 10, 5, 77]
  Arr.sort((a, b) => a - b) //箭頭函數(shù)不加大括號指向這個函數(shù)的返回值,可以不寫return關(guān)鍵字
  console.log(Arr) //[5, 10, 21, 56, 77, 88]

由上圖可知,回調(diào)函數(shù)內(nèi)部的處理方式是a - b ,而不再是對比兩個數(shù)。這是因?yàn)閷Ρ葍蓚€數(shù)的這一步操作是sort去做的,你只需要規(guī)定返回值即可,恰好數(shù)學(xué)定義大數(shù) - 小數(shù) = 正數(shù) 、小數(shù) - 大數(shù) = 負(fù)數(shù)

舉例 56 - 21 = 35 為正數(shù)、則返回值為正數(shù),正數(shù)代表改變位置;

21 - 88 = 35 為負(fù)數(shù)、則返回值為負(fù)數(shù),負(fù)數(shù)代表改變位置;

如果數(shù)學(xué)中大數(shù) - 小數(shù) ≠ 正數(shù) 、小數(shù) - 大數(shù) ≠ 負(fù)數(shù),就不能這么簡寫。所以要明確的是sort內(nèi)部做的是互相對比 而不是互減;

感謝各位的閱讀,以上就是“es6中數(shù)組怎么排序”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對es6中數(shù)組怎么排序這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

es6
AI