实现js sort()
JavaScript 的 sort() 方法
sort() 是 JavaScript 数组的一个内置方法,用于对数组元素进行排序。默认情况下,sort() 将元素转换为字符串并按照 Unicode 码点顺序排序。这种默认行为可能不符合数值排序的需求,因此通常需要自定义比较函数。
基本语法
array.sort([compareFunction])
compareFunction(可选):定义排序顺序的函数。如果省略,元素将被转换为字符串并按 Unicode 码点排序。
默认排序(字符串排序)
const fruits = ['banana', 'apple', 'orange', 'grape'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'grape', 'orange']
数值排序
默认情况下,sort() 会将数值转换为字符串排序,可能导致错误结果。例如:

const numbers = [10, 2, 5, 1];
numbers.sort();
console.log(numbers); // [1, 10, 2, 5](错误结果)
正确的数值排序需要使用比较函数:

const numbers = [10, 2, 5, 1];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 2, 5, 10](升序)
numbers.sort((a, b) => b - a);
console.log(numbers); // [10, 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); // 按 age 升序排序
自定义排序逻辑
比较函数可以包含更复杂的逻辑。例如,按字符串长度排序:
const words = ['apple', 'banana', 'grape', 'orange'];
words.sort((a, b) => a.length - b.length);
console.log(words); // ['apple', 'grape', 'banana', 'orange']
注意事项
sort()会修改原数组,而不是返回新数组。- 对于大型数组,自定义比较函数可能影响性能。
- 排序稳定性(相同值的相对顺序)在 ES2019 后得到保证。






