JS學習——陣列排序
阿新 • • 發佈:2022-03-01
學習內容來源: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
}
]