js排序实现
JavaScript 数组排序基础
使用 Array.prototype.sort() 方法对数组进行排序。默认情况下,sort() 将元素转换为字符串并按 Unicode 码点排序:
const arr = [3, 1, 4, 2];
arr.sort(); // 输出: [1, 2, 3, 4](数字排序正确)
const strArr = ['banana', 'apple', 'cherry'];
strArr.sort(); // 输出: ['apple', 'banana', 'cherry']
自定义排序规则
通过传递比较函数实现复杂排序。比较函数接收参数 a 和 b,返回负数、零或正数:

// 数字升序
const numbers = [10, 2, 5];
numbers.sort((a, b) => a - b); // 输出: [2, 5, 10]
// 数字降序
numbers.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 升序
字符串排序的本地化支持
使用 localeCompare() 处理语言敏感的字符串排序(如忽略大小写或特定语言规则):

const fruits = ['Apple', 'banana', 'Cherry'];
fruits.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));
// 输出: ['Apple', 'banana', 'Cherry'](不区分大小写)
稳定排序的实现
ES2019 后 sort() 稳定,但如需兼容旧环境,可通过索引保持稳定性:
const data = [
{ value: 2, priority: 1 },
{ value: 1, priority: 1 },
{ value: 3, priority: 2 }
];
// 添加索引辅助稳定排序
data.forEach((item, index) => item.index = index);
data.sort((a, b) =>
a.priority - b.priority || a.index - b.index
);
// 相同 priority 的元素保持原始顺序
复杂多条件排序
结合多个属性或条件进行排序:
const tasks = [
{ title: 'Task A', priority: 'high', due: '2023-10-01' },
{ title: 'Task B', priority: 'low', due: '2023-09-01' }
];
tasks.sort((a, b) => {
const priorityOrder = { high: 1, medium: 2, low: 3 };
return (
priorityOrder[a.priority] - priorityOrder[b.priority] ||
new Date(a.due) - new Date(b.due)
);
});
// 先按 priority 升序,再按日期升序
性能注意事项
- 大规模数据排序时,考虑使用 TypedArray 或 Web Worker 避免阻塞主线程。
- 对固定结构数据,预处理(如生成排序键)可能提升效率。






