Skip to content
本站總訪問量
本站訪客數 人次

JavaScript sort() 排序方法完整教學

什麼是 sort() 方法?

Array.prototype.sort() 是 JavaScript 內建的陣列排序方法,可以對陣列元素進行排序。

比較函數的返回值意義

sort((a, b) => {...}) 中,比較函數的返回值決定排序順序:

返回值意義結果
-1 (負數)a 應該排在 b 之前a 在前,b 在後
1 (正數)a 應該排在 b 之後b 在前,a 在後
0ab 順序不變保持原順序

基本排序範例

數字排序

升序排序(小到大):

javascript
const numbers = [3, 1, 4, 1, 5, 9];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 1, 3, 4, 5, 9]

降序排序(大到小):

javascript
const numbers = [3, 1, 4, 1, 5, 9];
numbers.sort((a, b) => b - a);
console.log(numbers); // [9, 5, 4, 3, 1, 1]

字串排序

字母順序:

javascript
const fruits = ['banana', 'apple', 'cherry'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'cherry']

反向字母順序:

javascript
const fruits = ['banana', 'apple', 'cherry'];
fruits.sort((a, b) => b.localeCompare(a));
console.log(fruits); // ['cherry', 'banana', 'apple']

物件排序

根據物件屬性排序

javascript
const students = [
  { name: 'Alice', score: 85 },
  { name: 'Bob', score: 92 },
  { name: 'Charlie', score: 78 }
];

// 按分數升序
students.sort((a, b) => a.score - b.score);
console.log(students);
// [{ name: 'Charlie', score: 78 }, { name: 'Alice', score: 85 }, { name: 'Bob', score: 92 }]

// 按分數降序
students.sort((a, b) => b.score - a.score);
console.log(students);
// [{ name: 'Bob', score: 92 }, { name: 'Alice', score: 85 }, { name: 'Charlie', score: 78 }]

按字串屬性排序

javascript
const students = [
  { name: 'Charlie', age: 20 },
  { name: 'Alice', age: 22 },
  { name: 'Bob', age: 19 }
];

// 按姓名排序
students.sort((a, b) => a.name.localeCompare(b.name));
console.log(students);
// [{ name: 'Alice', age: 22 }, { name: 'Bob', age: 19 }, { name: 'Charlie', age: 20 }]

排序原理解析

為什麼 a - b 是升序?

javascript
// 當 a = 3, b = 1 時
3 - 1 = 2 (正數)a 排在 b 後面[1, 3]

// 當 a = 1, b = 3 時  
1 - 3 = -2 (負數)a 排在 b 前面[1, 3]

為什麼 b - a 是降序?

javascript
// 當 a = 1, b = 3 時
3 - 1 = 2 (正數)a 排在 b 後面[3, 1]

// 當 a = 3, b = 1 時
1 - 3 = -2 (負數)a 排在 b 前面[3, 1]

進階排序技巧

多重條件排序

javascript
const data = [
  { name: 'Alice', age: 25, score: 85 },
  { name: 'Bob', age: 25, score: 92 },
  { name: 'Charlie', age: 23, score: 85 }
];

// 先按年齡,再按分數排序
data.sort((a, b) => {
  if (a.age !== b.age) {
    return a.age - b.age; // 年齡升序
  }
  return b.score - a.score; // 分數降序
});

注意事項

  1. sort() 會修改原陣列,如果不想修改原陣列,請先複製:

    javascript
    const sortedArray = [...originalArray].sort((a, b) => a - b);
  2. 預設是字串排序,數字需要提供比較函數:

    javascript
    [10, 2, 1].sort(); // ['1', '10', '2'] ❌
    [10, 2, 1].sort((a, b) => a - b); // [1, 2, 10] ✅

總結

  • a - b:升序排序(小到大)
  • b - a:降序排序(大到小)
  • 返回負數:a 在前
  • 返回正數:b 在前
  • 返回 0:順序不變

Contributors

The avatar of contributor named as lucashsu95 lucashsu95

Changelog