1. 程式人生 > 其它 >JS學習——陣列排序

JS學習——陣列排序

學習內容來源:JavaScript 陣列排序

JavaScript 陣列排序

陣列排序

sort() 方法以字母順序對陣列進行排序.

注意:在原陣列上進行排序

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

反轉陣列

reverse() 方法反轉陣列中的元素。

注意:在原陣列上進行反轉

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.reverse();   // 返回 ['Mango', 'Apple', 'Orange', 'Banana']

數字排序

預設地,sort() 函式按照字串順序對值進行排序。可以向 sort() 方法傳入一個比值函式來進行數字排序。

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

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

隨機排序

sort() 方法傳入一個可以返回值為(負、零或正值)的比值函式來進行隨機排序

// Math.random()返回介於 0(包含) ~ 1(不包含) 之間的一個隨機數:
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()}); 

查詢最高(或最低)的陣列值

JavaScript 不提供查詢陣列中最大或最小陣列值的內建函式。

通過陣列排序後,可以通過索引值獲取陣列最高或最低值。但是,僅僅需要找到最高或最低值,對整個陣列進行排序是效率極低的方法。

1、對陣列使用 Math.max() 和 Math.min()

JavaScript apply() 方法允許傳入一個數組作為引數。

// 傳入一個 arr 陣列,返回 arr 陣列的最大值
function myArrayMax(arr) {
    return Math.max.apply(null, arr);
}
// 傳入一個 arr 陣列,返回 arr 陣列的最小值
function myArrayMin(arr) {
    return Math.min.apply(null, arr);
}

2、自定義

// 此函式遍歷陣列,用找到的最高值與每個值進行比較
function myArrayMax(arr) {
    var len = arr.length
    var max = -Infinity;
    while (len--) {
        if (arr[len] > max) {
            max = arr[len];
        }
    }
    return max;
}

// 此函式遍歷陣列,用找到的最低值與每個值進行比較
function myArrayMin(arr) {
    var len = arr.length
    var min = Infinity;
    while (len--) {
        if (arr[len] < min) {
            min = arr[len];
        }
    }
    return min;
}

排序物件陣列

即使物件擁有不同資料型別的屬性,sort() 方法仍可用於對陣列進行排序。解決方法是通過比較函式來對比屬性值。

例子:

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

// 按照物件的 year 屬性值的大小來升序排序(數字排序)
cars.sort(function(a, b){return a.year - b.year});
// 結果如下:
[
    {
        "type": "Saab",
        "year": 2001
    },
    {
        "type": "BMW",
        "year": 2010
    },
    {
        "type": "Volvo",
        "year": 2016
    }
]

// 按照物件的 type 屬性值的大小來升序排序(字串排序)
cars.sort(function(a, b){
  var x = a.type.toLowerCase();
  var y = b.type.toLowerCase();
  if (x < y) {return -1;}
  if (x > y) {return 1;}
  return 0;
});
// 結果如下:
[
    {
        "type": "BMW",
        "year": 2010
    },
    {
        "type": "Saab",
        "year": 2001
    },
    {
        "type": "Volvo",
        "year": 2016
    }
]