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
}
]