js sort 实现
实现 JavaScript 数组排序的方法
JavaScript 提供了 Array.prototype.sort() 方法用于对数组元素进行排序。默认情况下,sort() 方法将元素转换为字符串并按照 Unicode 码点顺序排序。为了更灵活地排序,可以传入自定义的比较函数。
基本用法(默认排序)
默认排序会将元素转换为字符串,并按 Unicode 码点升序排列:
const arr = [10, 2, 5, 1, 9];
arr.sort(); // 结果为 [1, 10, 2, 5, 9]
自定义比较函数
通过传递比较函数,可以实现数字、对象或其他复杂排序逻辑。
数字升序排序
const arr = [10, 2, 5, 1, 9];
arr.sort((a, b) => a - b); // 结果为 [1, 2, 5, 9, 10]
数字降序排序
const arr = [10, 2, 5, 1, 9];
arr.sort((a, b) => b - a); // 结果为 [10, 9, 5, 2, 1]
对象数组排序
根据对象的某个属性排序:
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 20 }
];
users.sort((a, b) => a.age - b.age);
// 结果按 age 升序排列
字符串排序
按字母顺序排序(区分大小写):
const names = ['Zoe', 'Alice', 'bob', 'Charlie'];
names.sort(); // 结果为 ['Alice', 'Charlie', 'Zoe', 'bob']
不区分大小写的字符串排序:
const names = ['Zoe', 'Alice', 'bob', 'Charlie'];
names.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));
// 结果为 ['Alice', 'bob', 'Charlie', 'Zoe']
稳定性
从 ES2019 开始,sort() 方法是稳定的,即对于相同值的元素,排序后的相对顺序与排序前一致。
原地排序
sort() 方法会修改原数组,而不会创建新数组。如果需要保留原数组,可以先复制一份:
const original = [3, 1, 4, 2];
const sorted = [...original].sort();
性能说明
sort() 的时间复杂度取决于具体实现,现代浏览器通常使用高效的排序算法(如 TimSort)。对于大型数组,自定义比较函数的性能可能成为瓶颈。







