一、基本语法
array.sort([compareFunction])
-
array:要排序的数组。 compareFunction(可选):用于比较数组元素的函数。如果不提供比较函数,元素会被转换为字符串,然后按照 Unicode 码点进行排序。
二、默认排序行为
如果没有提供比较函数,sort 方法会将数组元素转换为字符串,然后按照 Unicode 码点进行排序。这可能会导致一些不符合预期的结果,特别是对于数字。
//示例
const numbers = [40, 100, 1, 5, 25, 10];
numbers.sort();
console.log(numbers); // 输出: [1, 10, 100, 25, 40, 5]
在这个例子中,数字被转换为字符串后进行排序,导致结果不符合预期。
三、使用比较函数
为了实现正确的排序,可以提供一个比较函数。比较函数接受两个参数,通常称为 a 和 b,并返回一个数值:
- 如果返回值小于 0,则
a会被排在b之前。 - 如果返回值等于 0,则
a和b的相对位置不变。 - 如果返回值大于 0,则
a会被排在b之后。
//数字升序排列
const numbers = [40, 100, 1, 5, 25, 10];
numbers.sort((a, b) => a - b);
console.log(numbers); // 输出: [1, 5, 10, 25, 40, 100]
在这个例子中,比较函数 (a, b) => a - b 确保数字按升序排列。
//数字降序排列
const numbers = [40, 100, 1, 5, 25, 10];
numbers.sort((a, b) => b - a);
console.log(numbers); // 输出: [100, 40, 25, 10, 5, 1]
在这个例子中,比较函数 (a, b) => b - a 确保数字按降序排列。
示例:对象数组排序
//假设有一个对象数组,每个对象都有一个 age 属性,我们希望按 age 属性进行排序。
const people = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 20 }
];
people.sort((a, b) => a.age - b.age);
console.log(people);
// 输出:
// [
// { name: 'Charlie', age: 20 },
// { name: 'Alice', age: 25 },
// { name: 'Bob', age: 30 }
// ]
四、总结
- 默认行为:将数组元素转换为字符串,按 Unicode 码点排序。
- 比较函数:用于自定义排序逻辑,返回值决定元素的相对顺序。
- 稳定性:不同的 JavaScript 引擎可能有不同的实现,部分实现是稳定的。
通过理解 sort 函数的工作原理和使用比较函数,可以实现对数组元素的精确排序。
6263

被折叠的 条评论
为什么被折叠?



