js sort实现
数组排序基础方法
JavaScript 数组的 sort() 方法默认将元素转换为字符串后按 Unicode 码点排序。直接调用可能无法满足数值排序需求。
const arr = [10, 2, 5];
arr.sort(); // 结果为 [10, 2, 5](字符串比较)
数值升序排序
通过比较函数实现数值排序,返回 a - b 表示升序:
const arr = [10, 2, 5];
arr.sort((a, b) => a - b); // 结果为 [2, 5, 10]
数值降序排序
返回 b - a 实现降序:
const arr = [10, 2, 5];
arr.sort((a, b) => b - a); // 结果为 [10, 5, 2]
对象属性排序
根据对象属性排序时,需在比较函数中指定属性名:
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 20 }
];
users.sort((a, b) => a.age - b.age); // 按 age 升序
字符串排序
默认按字母顺序排序(区分大小写):
const names = ['Zoe', 'alice', 'Bob'];
names.sort(); // 结果为 ['Bob', 'Zoe', 'alice'](大写字母优先)
不区分大小写的字符串排序:
const names = ['Zoe', 'alice', 'Bob'];
names.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));
稳定排序
ES2019 规定 sort() 必须为稳定排序(相同值的元素保持原始顺序)。现代浏览器均支持此特性。
性能注意事项
sort() 的时间复杂度通常为 O(n log n),但具体实现依赖浏览器引擎(如 V8 使用 TimSort)。对大型数组排序时,避免在比较函数中执行复杂操作。
自定义排序逻辑
比较函数可灵活定义规则。例如按字符串长度排序:
const words = ['apple', 'banana', 'kiwi'];
words.sort((a, b) => a.length - b.length); // 结果为 ['kiwi', 'apple', 'banana']






