es6數組的排序方法是什麼

青灯夜游
發布: 2022-04-11 18:04:23
原創
12963 人瀏覽過

es6陣列的排序方法是「sort()」。 sort()方法用於對數組的元素進行排序,排序順序可以是字母或數字,並按升序或降序,預設按字母升序;該方法有一個可選參數,此參數必須是函數,語法「array. sort(callback(a,b))」。

es6數組的排序方法是什麼

本教學操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。

sort() 方法用於對陣列的元素進行排序。

  • 排序順序可以是字母或數字,並依升序或降序。

  • 預設排序順序為字母升序。

其中,sort()方法有一個可選參數。但是,此參數必須是函數。數組在呼叫 sort()方法時,如果沒有傳參將按字母順序(字元編碼順序)對數組中的元素進行排序,如果想按照其他標準進行排序,就需要進行傳一個參數且為函數,該函數要比較兩個值,並且會傳回一個用於說明這兩個值的相對順序的數字。

語法:

array.sort(callback(a,b))
登入後複製
參數描述
callback(a,b)

可選。規定排序順序。必須是函數。

傳回值:Array類型,是對陣列的參考。請注意,數組在原始數組上進行排序,不產生副本。

範例:

 //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數組的排序方法是什麼

由上述程式碼可知:sort()方法只能對0-9以內的陣列進行正確排序,兩位數以上的數組項雖然給了回傳值,但卻不是排序後的結果。這是因為sort()是內部做的是根據ASCLL碼進行排序的,並不是根據數值大小排序。那這個方法連兩位數以上的數字都無法進行正規排序處理,跟鹹魚有什麼差別呢?

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

  • 當callback的回傳值是正數時、那麼 b 會被排列到 a 之前;

  • 當callback的回傳值是負數時、那麼 a 會被排列到 b 之前;

  • 當callback的回傳值是為0 時、那麼 a 與 b 的位置則保持不變;

  • #sort每執行一次會根據回傳值調換兩個參數a、b在原數組中的位置;

看完上面的描述你會很蒙圈,你一定會問回傳值在哪裡?參數 a b 的實參是誰?這些當你看懂下面代碼之後統統小兒科!

 //sort 内部写法
  let Arr = [56, 21, 29, 105, 45]
  Arr.sort(function(a, b) { //callback
      if (a > b) { // a b 分别是Arr中的 56 21
          return 1  //返回正数 ,b排列在a之前
      } else {
          return -1 //返回负数 ,a排列在b之前
      }
  })
  console.log(Arr) //[21, 29, 45, 55, 105]
登入後複製

執行邏輯:

es6數組的排序方法是什麼

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

談談回傳值:上述程式碼寫的回傳值1 與-1 只是像徵性的代表1為正數-1為負數,不論你程式碼寫什麼回傳值,sort內部只會去判斷你的回傳值是正數還是負數,就算等式成立回傳100 不成立回傳-10000都是可行的。

解釋簡寫方式:

es6數組的排序方法是什麼

//简写 最终版  
  let Arr = [56, 21, 88, 10, 5, 77]
  Arr.sort((a, b) => a - b) //箭头函数不加大括号指向这个函数的返回值,可以不写return关键字
  console.log(Arr) //[5, 10, 21, 56, 77, 88]
登入後複製

由上圖可知,回呼函數內部的處理方式是a - b ,而不再是比較兩個數。這是因為比較兩個數的這一步操作是sort去做的,你只需要規定回傳值即可,恰好數學定義大數- 小數= 正數、小數- 大數= 負數

舉例56 - 21 = 35 為正數、則回傳值為正數,正數代表改變位置;

        21 - 88 = 35 為負數、則傳回值為負數,負數代表改變位置;

如果數學中大數- 小數≠ 正數、小數- 大數≠ 負數,就不能這麼簡寫。所以要明確的是sort內部做的是互相比較 而不是互減;

【相關推薦:javascript影片教學web前端

以上是es6數組的排序方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板