实现js sort
实现 JavaScript 的 sort 方法
JavaScript 的 sort 方法用于对数组元素进行排序。默认情况下,sort 方法将元素转换为字符串并按照 Unicode 码点顺序排序。为了实现更复杂的排序逻辑,可以传入自定义的比较函数。
默认排序(按 Unicode 顺序)
默认情况下,sort 方法会将数组元素转换为字符串并比较它们的 Unicode 码点顺序。例如:

const fruits = ['banana', 'apple', 'orange', 'grape'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'grape', 'orange']
自定义比较函数
通过传入一个比较函数,可以实现自定义排序逻辑。比较函数接收两个参数 a 和 b,返回以下值:

- 负数:
a排在b前面。 - 正数:
b排在a前面。 - 零:顺序不变。
数字升序排序
const numbers = [10, 2, 5, 1, 8];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 2, 5, 8, 10]
数字降序排序
const numbers = [10, 2, 5, 1, 8];
numbers.sort((a, b) => b - a);
console.log(numbers); // [10, 8, 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);
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']
实现原地排序
sort 方法会直接修改原数组(原地排序),而不会返回新数组。如果需要保留原数组,可以先复制一份再排序:
const original = [3, 1, 4, 2];
const sorted = [...original].sort((a, b) => a - b);
console.log(original); // [3, 1, 4, 2]
console.log(sorted); // [1, 2, 3, 4]
注意事项
sort方法的时间复杂度和具体实现相关,通常为 O(n log n)。- 对于大型数组,自定义比较函数的性能可能影响排序速度。
- 默认排序会将数字转换为字符串,可能导致意外结果(如
[1, 10, 2]排序为[1, 10, 2])。





