在 JavaScript 中,可以通过多种方式实现数组排序。以下是常见的几种方法:
1. 使用 Array.prototype.sort()
方法
这是最直接的排序方法,但需要注意默认行为:
const arr = [3, 1, 4, 2];
arr.sort(); // 默认按 Unicode 码点升序排列
console.log(arr); // 输出: [1, 2, 3, 4]
问题:默认排序可能不符合预期
const arr = [10, 5, 100];
arr.sort();
console.log(arr); // 输出: [10, 100, 5](因为按字符串比较)
解决方案:自定义比较函数
// 升序排列
arr.sort((a, b) => a - b);
// 降序排列
arr.sort((a, b) => b - a);
2. 手动实现排序算法(如快速排序)
如果需要自定义排序逻辑,可以手动实现算法:
快速排序示例
function quickSort(arr) {
if (arr.length <= 1) return arr;
const pivot = arr[0];
const left = [];
const right = [];
for (let i = 1; i < arr.length; i++) {
if (arr[i] < pivot) left.push(arr[i]);
else right.push(arr[i]);
}
return [...quickSort(left), pivot, ...quickSort(right)];
}
console.log(quickSort([3, 1, 4, 2])); // 输出: [1, 2, 3, 4]
3. 对对象数组按属性排序
const users = [
{ name: "Alice", age: 25 },
{ name: "Bob", age: 20 },
{ name: "Charlie", age: 30 }
];
// 按 age 升序
users.sort((a, b) => a.age - b.age);
// 按 name 字母顺序
users.sort((a, b) => a.name.localeCompare(b.name));
4. 注意事项
sort()
会修改原数组(非纯函数)。- 对大型数组,建议使用内置
sort()
(浏览器已优化)。 - 稳定排序:ES2019 规定
sort()
必须稳定(相同值保持原始顺序)。
- 简单排序:直接用
arr.sort((a, b) => a - b)
- 复杂需求:自定义比较函数或实现特定算法
- 对象排序:通过属性比较
(www.nzw6.com)