实现js数组排序
使用 Array.prototype.sort() 方法
JavaScript 数组的 sort() 方法是实现排序的最直接方式。默认情况下,sort() 将元素转换为字符串并按照 Unicode 码点顺序排序。对于数字排序,需自定义比较函数。
const numbers = [3, 1, 4, 1, 5, 9, 2, 6];
numbers.sort((a, b) => a - b); // 升序:[1, 1, 2, 3, 4, 5, 6, 9]
numbers.sort((a, b) => b - a); // 降序:[9, 6, 5, 4, 3, 2, 1, 1]
自定义对象数组排序
对于对象数组,可以通过比较对象的某个属性值实现排序。

const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 20 }
];
users.sort((a, b) => a.age - b.age); // 按 age 升序
实现稳定排序
默认的 sort() 方法在某些浏览器中可能不稳定(相同元素的相对顺序可能改变)。为实现稳定排序,可扩展比较逻辑:
const data = [
{ value: 1, priority: 1 },
{ value: 2, priority: 0 },
{ value: 3, priority: 1 }
];
data.sort((a, b) => {
if (a.priority === b.priority) return 0; // 保持原始顺序
return a.priority - b.priority;
});
按字符串属性排序
对字符串属性排序需使用 localeCompare() 方法处理大小写和语言差异:

const items = ['résumé', 'Rose', 'house', 'Hotel'];
items.sort((a, b) => a.localeCompare(b, 'en', { sensitivity: 'base' }));
// 结果:['house', 'Hotel', 'résumé', 'Rose']
多条件排序
通过组合多个比较条件实现复杂排序:
const products = [
{ name: 'Laptop', price: 800, stock: 4 },
{ name: 'Phone', price: 500, stock: 10 },
{ name: 'Tablet', price: 800, stock: 5 }
];
products.sort((a, b) => {
if (a.price !== b.price) return a.price - b.price;
return b.stock - a.stock; // 价格相同时按库存降序
});
性能注意事项
对于大规模数据(超过 10^5 个元素),sort() 的时间复杂度为 O(n log n)。若需更高性能,可考虑:
- 使用 TypedArray 处理数值数据
- 对于已知范围的小整数,使用计数排序等线性算法
- 使用 Web Workers 避免阻塞主线程






