🙂
JavaScript - 程式設計
  • JavaScript - 程式設計
  • 1. 簡介
    • 1.1 講者簡介
    • 1.2 課程簡介
    • 1.3 開發工具簡介
    • 1.4 第一個 JavaScript
  • 2. 網站技術簡介
    • 2.1 網站前端技術
    • 2.2 網站後端技術
    • 2.3 JavaScript 簡介
  • 3. JavaScript程式語言
    • 3.1 套用 JavaScript
    • 3.2 註解(Comment)
    • 3.3 變數(Variable)
    • 3.4 資料型態(Data Types)
    • 3.5 Strict 模式
    • 3.6 運算子(Operator)
    • 3.7 字串(String)
    • 3.8 數值(Number)
    • 3.9 陣列(Array)
    • 3.10 物件(Object)
    • 3.11 條件式(Conditional)
    • 3.12 迴圈(Loop)
    • 3.13 函式(Function)
    • 3.14 類別(Class)
    • 3.15 傳值呼叫、傳址呼叫
    • 3.16 變數可視範圍(scope)
    • 3.17 錯誤補捉(Errors)
    • 3.18 資料格式
  • 4. JavaScript常用函式及主題
    • 4.1 JSON
    • 4.2 時間間隔執行
    • 4.3 數學(Math)
    • 4.4 日期時間(Date)
    • 4.5 陣列迭代(Iteration)
    • 4.6 陣列排序(Sort)
    • 4.7 正規表達式(Regular Expression)
    • 4.8 效能測試
    • 4.9 this 關鍵字
  • 5. 參考資料
Powered by GitBook
On this page
  • Array.sort() 排序字串
  • Array.sort() 排序數值
  • 關於 Compare Function(比較函式)
  • 例 1:排序由小到大
  • 例 2:排序由大到小
  • Array.reverse()
  • 練習:排序物件陣列(Sorting Object Arrays)
  1. 4. JavaScript常用函式及主題

4.6 陣列排序(Sort)

在 javascript/practice 資料夾下,建立 array_sort.html 檔案,以便練習。

Array.sort() 排序字串

預設上,sort() 排序的是字串。然後會影響原來的字串。

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();

console.log(fruits); // ["Apple", "Banana", "Mango", "Orange"]

Array.sort() 排序數值

如果陣列裡是數值,會發現排序出來的結果跟我們想的不一樣:

var points = [40, 100, 1, 5, 25, 10];
points.sort(); // 字串方式去排序

console.log(points); // [1, 10, 100, 25, 40, 5]

關於 Compare Function(比較函式)

Compare Function 的用途是用來取代 sort() 函式預設的字串排序方式,也就是我們可以自訂排序方式,每次比較兩個數值,然後必需回傳負數、0、正數。

常見寫法:

function(a, b){
  return a - b;
}
  • 回傳如果是負數: 就先排 a 再排 b。

  • 回傳如果是正數:就先排 b 再排 a。

  • 回傳如果是 0:就不做任何更動。

例 1:排序由小到大

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){
  return a - b;
});

console.log(points); // [1, 5, 10, 25, 40, 100]

解讀:

  • 40、100 會被代入,a 是 40,b 是 100,兩者相減是負數,所以先排 40 再排 100。依此類推。

例 2:排序由大到小

只要將回傳的結果加上負號即可:

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){
  return -(a - b);
});

console.log(points); // [100, 40, 25, 10, 5, 1]

解讀:

  • 40、100 會被代入,a 是 40,b 是 100,兩者相減是負數,但因為加上了負號,所以回傳結果是正數,所以先排 100 再排 40。

Array.reverse()

陣列整個反轉:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();       // 排序
fruits.reverse();    // 反轉

console.log(fruits); // ["Orange", "Mango", "Banana", "Apple"]

練習:排序物件陣列(Sorting Object Arrays)

請將以下的物件陣列,依照 year 來排序,由小到大:

var cars = [
  {type:"Volvo", year:2016},
  {type:"Saab", year:2001},
  {type:"BMW", year:2010}
];

// 排序部份寫在這



console.log(cars);

參考作法:

Previous4.5 陣列迭代(Iteration)Next4.7 正規表達式(Regular Expression)

Last updated 4 years ago