在JavaScript中,数组排序主要有两种主要方法:Array.prototype.sort() 和自定义排序函数。
- Array.prototype.sort()
sort() 方法按照字符串Unicode码点顺序对数组元素进行排序,并返回数组。对于非字符串类型的数组元素,sort() 方法会先将它们转换为字符串,然后再进行排序。
基本用法:
javascript复制代码
| let arr = [5, 2, 9, 1, 5, 6];  | |
| arr.sort();  | |
| console.log(arr); // 输出: [1, 2, 5, 5, 6, 9],因为元素被转换为字符串后再排序 | 
但是,如果你希望按数字大小排序,你可以提供一个比较函数作为 sort() 的参数:
javascript复制代码
| let arr = [5, 2, 9, 1, 5, 6];  | |
| arr.sort(function(a, b) {  | |
| return a - b; // 升序排序  | |
| });  | |
| console.log(arr); // 输出: [1, 2, 5, 5, 6, 9] | 
如果你希望降序排序,只需改变比较函数的返回值:
javascript复制代码
| let arr = [5, 2, 9, 1, 5, 6];  | |
| arr.sort(function(a, b) {  | |
| return b - a; // 降序排序  | |
| });  | |
| console.log(arr); // 输出: [9, 6, 5, 5, 2, 1] | 
- 自定义排序函数
虽然 sort() 方法足以满足大多数排序需求,但你也可以编写自己的排序函数。这通常涉及到使用如冒泡排序、插入排序、选择排序、快速排序等算法。但请注意,对于大型数组,JavaScript内置的 sort() 方法(当使用正确的比较函数时)通常比简单的自定义排序算法更有效。
例如,一个简单的冒泡排序实现可能如下所示:
javascript复制代码
| function bubbleSort(arr) {  | |
| let len = arr.length;  | |
| for (let i = 0; i < len - 1; i++) {  | |
| for (let j = 0; j < len - 1 - i; j++) {  | |
| if (arr[j] > arr[j + 1]) { // 相邻元素两两对比  | |
| let temp = arr[j + 1]; // 元素交换  | |
| arr[j + 1] = arr[j];  | |
| arr[j] = temp;  | |
| }  | |
| }  | |
| }  | |
| return arr;  | |
| }  | |
| let arr = [5, 2, 9, 1, 5, 6];  | |
| arr = bubbleSort(arr);  | |
| console.log(arr); // 输出: [1, 2, 5, 5, 6, 9] | 
但请注意,对于大型数组,这种简单的冒泡排序实现可能不是最高效的。在实际应用中,你通常会使用更先进的排序算法,或者简单地使用JavaScript内置的 sort() 方法。