JAVASCRIPT 基础教程
JAVASCRIPT & DOM
JAVASCRIPT & BOM
JAVASCRIPT 高级教程
JAVASCRIPT 示例
JAVASCRIPT 参考

JavaScript 排序数组

在本教程中,您将学习如何在 JavaScript 中对数组元素进行排序。

对数组排序

排序是处理数组时的常见任务。 例如,如果您想按字母顺序显示城市或县名,就会使用它。

JavaScript Array 对象有一个内置方法 sort() 用于按字母顺序对数组元素进行排序。 下面的例子演示了它是如何工作的:

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

alert(fruits); // 输出: Apple,Banana,Mango,Orange,Papaya
alert(sorted); // 输出: Apple,Banana,Mango,Orange,Papaya

反转数组

您可以使用 reverse() 方法来反转数组元素的顺序。

此方法反转数组,使第一个数组元素成为最后一个,最后一个数组元素成为第一个。 这是一个例子:

var counts = ["one", "two", "three", "four", "five"];
var reversed = counts.reverse(); 

alert(counts); // 输出: five,four,three,two,one
alert(reversed); // 输出: five,four,three,two,one

注意: sort()reverse() 方法修改原始数组并返回对同一数组的引用,如上例所示 .


对数值数组进行排序

sort() 方法在应用于数值数组(即包含数值的数组)时可能会产生意外结果。 例如:

var numbers = [5, 20, 10, 75, 50, 100];
numbers.sort(); // 对数字数组进行排序
alert(numbers); // 输出: 10,100,20,5,50,75

如您所见,结果与我们预期的不同。 这是因为,sort() 方法通过将数字数组元素转换为字符串来对它们进行排序(即 20 变为"20",100 变为"100",依此类推),并且由于第一个字符 字符串"20"(即"2")的第一个字符出现在字符串"100"(即"1")的第一个字符之后,这就是为什么值 20 排在 100 之后的原因。

要解决数值数组的排序问题,您可以传递一个比较函数,如下所示:

var numbers = [5, 20, 10, 75, 50, 100];

// 使用比较函数对数组进行排序
numbers.sort(function(a, b) {
    return a - b;
});
alert(numbers); // 输出: 5,10,20,50,75,100

如您所见,这次我们得到了正确的结果。 让我们看看它是如何工作的。

指定比较函数时,数组元素按照比较函数的返回值排序。 例如,当比较 ab:

  • 如果比较函数返回一个小于 0 的值,那么 a 首先出现。
  • 如果比较函数返回大于 0 的值,则 b 先出现。
  • 如果比较函数返回 0,ab 彼此保持不变,但对所有其他元素进行排序。

因此,由于5 - 20 = -15小于0,所以5在前,同样20 - 10 = 10大于0,所以10在20之前,同样20 - 75 = -55小于0,所以20在75之前,同样50在75之前,并且很快。


查找数组中的最大值和最小值

您可以结合使用 apply() 方法和 Math.max()Math.min() 来查找数组中的最大值和最小值,如下所示:

var numbers = [3, -7, 10, 8, 15, 2];

// 定义函数以找到最大值
function findMax(array) {
    return Math.max.apply(null, array);
}

// 定义函数以找到最小值
function findMin(array) {
    return Math.min.apply(null, array);
}

alert(findMax(numbers)); // 输出: 15
alert(findMin(numbers)); // 输出: -7

apply() 方法提供了一种方便的方法,可以将数组值作为参数传递给函数,该函数以类似数组的方式接受多个参数,但不接受数组(例如此处的 Math.max()Math.min() 方法)。 因此,上面示例中的结果语句 Math.max.apply(null, numbers) 等价于 Math.max(3, -7, 10, 8, 15, 2)


对对象数组进行排序

sort() 方法也可用于使用 compare 函数对对象数组进行排序。

以下示例将向您展示如何按属性值对对象数组进行排序:

var persons = [
    { name: "Harry", age: 14 },
    { name: "Ethan", age: 30 },
    { name: "Peter", age: 21 },
    { name: "Clark", age: 42 },
    { name: "Alice", age: 16 }
];

// 按年龄排序
persons.sort(function (a, b) {
    return a.age - b.age;
});

console.log(persons);

// 按名称分类
persons.sort(function(a, b) {
    var x = a.name.toLowerCase(); // 忽略大小写
    var y = b.name.toLowerCase(); // 忽略大小写
    if(x < y) {
        return -1;
    }
    if(x > y) {
        return 1;
    }
    // 名称必须相同
    return 0;
});

console.log(persons);
Advertisements