数组 sort 方法
sort() 用于对数组元素进行排序。会修改原数组。
基本用法
const arr = [3, 1, 4, 1, 5, 9, 2, 6];
// 默认排序(按字符串比较)
arr.sort();
console.log(arr); // [1, 1, 2, 3, 4, 5, 6, 9]
数字排序
const numbers = [3, 1, 4, 1, 5, 9, 2, 6];
// 升序
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 1, 2, 3, 4, 5, 6, 9]
// 降序
numbers.sort((a, b) => b - a);
console.log(numbers); // [9, 6, 5, 4, 3, 2, 1, 1]
字符串排序
const words = ['banana', 'apple', 'cherry', 'date'];
// 按字母顺序(升序)
words.sort((a, b) => a.localeCompare(b));
console.log(words); // ['apple', 'banana', 'cherry', 'date']
// 忽略大小写
const mixed = ['Banana', 'apple', 'Cherry'];
mixed.sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));
console.log(mixed); // ['apple', 'Banana', 'Cherry']
对象数组排序
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 20 },
{ name: 'Charlie', age: 30 }
];
// 按年龄排序
users.sort((a, b) => a.age - b.age);
// 按姓名排序
users.sort((a, b) => a.name.localeCompare(b.name));
// 多条件排序
const products = [
{ name: 'A', price: 100, category: 'B' },
{ name: 'B', price: 50, category: 'A' },
{ name: 'C', price: 100, category: 'A' }
];
// 先按类别,再按价格
products.sort((a, b) => {
if (a.category !== b.category) {
return a.category.localeCompare(b.category);
}
return a.price - b.price;
});
不修改原数组的排序
const original = [3, 1, 4, 1, 5];
// 先复制再排序
const sorted = [...original].sort((a, b) => a - b);
console.log(original); // [3, 1, 4, 1, 5]
console.log(sorted); // [1, 1, 3, 4, 5]
常见比较函数
// 升序
(a, b) => a - b
// 降序
(a, b) => b - a
// 字符串升序
(a, b) => a.localeCompare(b)
// 字符串降序
(a, b) => b.localeCompare(a)
// 按对象属性升序
(a, b) => a.property - b.property
// 按对象属性降序
(a, b) => b.property - a.property