实现js sort()
JavaScript 的 sort() 方法
JavaScript 的 sort() 方法用于对数组的元素进行排序。默认情况下,sort() 方法将元素转换为字符串,并按照 Unicode 码点顺序进行排序。对于数字排序,可能需要自定义比较函数。
基本语法
array.sort([compareFunction])
默认排序(按 Unicode 码点)
如果不提供比较函数,sort() 会将元素转换为字符串并比较它们的 Unicode 码点顺序。
const fruits = ['banana', 'apple', 'orange', 'grape'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'grape', 'orange']
数字排序
默认情况下,数字也会被转换为字符串,可能导致意外的排序结果。

const numbers = [10, 2, 100, 5];
numbers.sort();
console.log(numbers); // [10, 100, 2, 5]
使用比较函数
为了正确排序数字或其他自定义顺序,可以提供一个比较函数。比较函数接收两个参数 a 和 b,返回值决定排序顺序:
- 返回负数:
a排在b前面 - 返回正数:
b排在a前面 - 返回 0:顺序不变
const numbers = [10, 2, 100, 5];
numbers.sort((a, b) => a - b); // 升序
console.log(numbers); // [2, 5, 10, 100]
numbers.sort((a, b) => b - a); // 降序
console.log(numbers); // [100, 10, 5, 2]
对象数组排序
比较函数也可以用于对象数组的排序。

const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 20 }
];
users.sort((a, b) => a.age - b.age); // 按年龄升序
console.log(users);
// [
// { name: 'Charlie', age: 20 },
// { name: 'Alice', age: 25 },
// { name: 'Bob', age: 30 }
// ]
字符串排序(忽略大小写)
如果需要忽略大小写排序字符串,可以在比较函数中处理。
const names = ['Alice', 'bob', 'Charlie', 'dave'];
names.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));
console.log(names); // ['Alice', 'bob', 'Charlie', 'dave']
稳定性
现代 JavaScript 引擎(ES2019 及以上)保证 sort() 是稳定的排序算法,即相等元素的相对顺序在排序前后保持不变。
性能
sort() 的时间复杂度取决于具体实现,通常为 O(n log n)。对于大型数组,可能需要考虑性能优化。
注意事项
sort()会修改原数组,不会创建新数组。- 对于稀疏数组(包含
undefined的元素),undefined会被排到数组末尾。 - 比较函数应确保逻辑一致,否则可能导致排序结果不稳定。






