推荐答案
在 JavaScript 中,可以使用 Array.prototype.sort() 方法对数组进行排序。默认情况下,sort() 方法会将数组元素转换为字符串,然后按照 Unicode 码点顺序进行排序。为了对数字数组进行正确的排序,通常需要提供一个比较函数。
// www.javascriptcn.com code example // 默认排序(按字符串排序) const arr1 = [10, 5, 20, 1]; arr1.sort(); console.log(arr1); // 输出: [1, 10, 20, 5] // 使用比较函数进行数字排序 const arr2 = [10, 5, 20, 1]; arr2.sort((a, b) => a - b); console.log(arr2); // 输出: [1, 5, 10, 20]
本题详细解读
sort() 方法的基本用法
sort() 方法是 JavaScript 数组的原生方法,用于对数组的元素进行排序。默认情况下,sort() 会将数组元素转换为字符串,然后按照 Unicode 码点顺序进行排序。这意味着对于数字数组,默认的排序结果可能不符合预期。
const arr = [10, 5, 20, 1]; arr.sort(); console.log(arr); // 输出: [1, 10, 20, 5]
使用比较函数进行排序
为了对数字数组进行正确的排序,通常需要提供一个比较函数。比较函数接收两个参数 a 和 b,分别代表数组中的两个元素。比较函数应返回以下值:
- 如果
a小于b,返回一个负数。 - 如果
a等于b,返回0。 - 如果
a大于b,返回一个正数。
const arr = [10, 5, 20, 1]; arr.sort((a, b) => a - b); console.log(arr); // 输出: [1, 5, 10, 20]
降序排序
如果需要降序排序,只需在比较函数中返回 b - a 即可。
const arr = [10, 5, 20, 1]; arr.sort((a, b) => b - a); console.log(arr); // 输出: [20, 10, 5, 1]
对对象数组进行排序
sort() 方法也可以用于对对象数组进行排序。只需在比较函数中指定对象的某个属性进行比较即可。
// www.javascriptcn.com code example
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 20 }
];
users.sort((a, b) => a.age - b.age);
console.log(users);
// 输出: [
// { name: 'Charlie', age: 20 },
// { name: 'Alice', age: 25 },
// { name: 'Bob', age: 30 }
// ]稳定性
从 ECMAScript 2019 开始,sort() 方法被要求是稳定的,即对于具有相同排序键的元素,它们的相对顺序在排序前后保持不变。
// www.javascriptcn.com code example
const arr = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 25 },
{ name: 'Charlie', age: 20 }
];
arr.sort((a, b) => a.age - b.age);
console.log(arr);
// 输出: [
// { name: 'Charlie', age: 20 },
// { name: 'Alice', age: 25 },
// { name: 'Bob', age: 25 }
// ]在这个例子中,Alice 和 Bob 的年龄相同,排序后它们的相对顺序保持不变。