js排序实现
JavaScript 数组排序方法
JavaScript 提供了多种方式对数组进行排序,以下是常见的实现方法:
使用 Array.prototype.sort() 方法
默认情况下,sort() 方法将元素转换为字符串并按 Unicode 码点排序:
const fruits = ['banana', 'apple', 'orange'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'orange']
自定义排序函数
通过传递比较函数可以实现自定义排序:

const numbers = [40, 100, 1, 5, 25];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 5, 25, 40, 100]
对象数组排序
对于对象数组,可以根据某个属性进行排序:
const items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'And', value: 45 }
];
items.sort((a, b) => a.value - b.value);
稳定排序实现
ES2019 规定 sort() 必须是稳定排序:

const data = [
{ name: 'a', order: 1 },
{ name: 'b', order: 1 },
{ name: 'c', order: 2 }
];
data.sort((a, b) => a.order - b.order);
// 保持原始a和b的相对顺序
性能优化
对于大型数组,可以考虑使用 TypedArray 提高性能:
const numbers = new Float64Array([40, 100, 1, 5, 25]);
numbers.sort();
特殊排序需求
随机排序
实现 Fisher-Yates 洗牌算法:
function shuffle(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
多条件排序
const students = [
{ name: 'Alex', grade: 15, age: 20 },
{ name: 'Bob', grade: 15, age: 18 }
];
students.sort((a, b) => {
if (a.grade !== b.grade) return a.grade - b.grade;
return a.age - b.age;
});
注意事项
sort()方法会修改原数组- 比较函数应返回负数、零或正数
- 对非ASCII字符排序需考虑本地化
- 数字排序必须使用比较函数,否则会按字符串排序






