Skip to main content

排序陣列 sort

基本使用#

預設的排序會用「字典序」來排,所以 22 會排在 3 前面:

var arr = [1, 3, 22]
arr.sort()
console.log(arr) // [1, 22, 3]

要特別注意的是 sort 會改變原本的陣列,而回傳值也是原本的陣列,意思是說:

var arr = [1, 3, 22]
var arr2 = arr.sort()
console.log(arr === arr2) // true

如果想要自訂排序邏輯,可以傳入一個 compare function,會給你兩個參數 a 與 b,如果:

  1. 回傳值 < 0,a 會排在 b 前面
  2. 回傳值 = 0,順序不變
  3. 回傳值 > 0,b 會排在 a 前面

我自己簡單記憶的邏輯是,先假設 a, b 傳入時的順序就是 a 在前 b 在後:

  1. 回傳 > 0 代表 a, b 要換位子
  2. 回傳 < 0 代表 a, b 不換位子
  3. 回傳 = 0 代表相等

由小排到大#

var arr = [5, 2, 8, 9, 4]
arr.sort((a, b) => a - b)
console.log(arr) // [2, 4, 5, 8, 9]

由大排到小#

var arr = [5, 2, 8, 9, 4]
arr.sort((a, b) => b - a)
console.log(arr) // [9, 8, 5, 4, 2]