在 JavaScript 中,我们经常需要对数组元素进行排序。这里讲解两种常用的数组排序方法:reverse() 和 sort()。
1. 数组反转:利用 reverse()
reverse()
方法,顾名思义,是用于反转数组中元素的顺序:
let values = [1, 2, 3, 4, 5];
values.reverse();
console.log(values); // 输出:[5, 4, 3, 2, 1]
在这个例子中,我们创建了一个包含从1到5的数字数组。调用 reverse()
之后,数组的元素顺序被反转,输出变为从5到1。
注意: reverse()
会直接修改原始数组,并返回修改后的数组,而不是创建一个新的反转数组。
2. 自定义数组排序:sort() 方法
与 reverse()
相比,sort()
方法提供了更为灵活的排序选项。默认情况下,sort()
会将数组的每个元素转换为字符串,并按照 Unicode 码点顺序进行排序。这可能导致非预期的排序结果,尤其是在处理数字数组时。
let values = [0, 1, 5, 10, 15];
values.sort();
console.log(values); // 输出可能是:[0, 1, 10, 15, 5],因为默认按字符串排序
为了解决这个问题,sort()
允许我们传入一个自定义的比较函数,以定义排序逻辑。
2.1 编写比较函数
比较函数接收两个参数(通常称为 a
和 b
),并决定它们在排序数组中的相对位置:
- 若
a
应在b
之前,返回负数。 - 若
a
与b
相等,返回 0。 - 若
a
应在b
之后,返回正数。
2.2 升序排序的实例
function compareNumbersAscending(a, b) {
return a - b;
}
let values = [0, 1, 5, 10, 15];
values.sort(compareNumbersAscending);
console.log(values); // 输出:[0, 1, 5, 10, 15]
在这个例子中,compareNumbersAscending
函数通过返回 a - b
实现了升序排序。当 a
小于 b
时,结果为负数,a
会被排在 b
前面。
2.3 降序排序的实例
要实现降序排序,只需简单调整比较函数的返回值:
function compareNumbersDescending(a, b) {
return b - a;
}
let values = [0, 1, 5, 10, 15];
values.sort(compareNumbersDescending);
console.log(values); // 输出:[15, 10, 5, 1, 0]
2.4 箭头函数简化比较逻辑
对于简单的数值排序,我们可以使用箭头函数来简化代码:
let values = [0, 1, 5, 10, 15];
values.sort((a, b) => a - b); // 升序
console.log(values); // 输出:[0, 1, 5, 10, 15]
values.sort((a, b) => b - a); // 降序
console.log(values); // 输出:[15, 10, 5, 1, 0]