跳到主要内容

数组 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