📅  最后修改于: 2023-12-03 15:13:04.432000             🧑  作者: Mango
在 JavaScript 中,.sort()
方法可以将数组按照升序或降序排列。本文将介绍 .sort()
方法的使用方式、注意事项以及一些示例。
.sort()
方法不会创建新的数组,而是直接修改原有数组。在调用 .sort()
方法时,可以传入一个函数作为参数,以指定排序规则。
const fruits = ['banana', 'apple', 'orange', 'grape'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'grape', 'orange']
上面的代码中,.sort()
方法将 fruits
数组按照字母顺序排序(即升序排列)。
可以通过传入一个比较函数来指定排序规则。
const numbers = [10, 2, 5, 1, 9];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 2, 5, 9, 10]
将上面的代码中传入的比较函数简化一下,可以写成如下形式:
function compare(a, b) {
if (a < b) {
return -1;
}
if (a > b) {
return 1;
}
return 0;
}
numbers.sort(compare);
console.log(numbers); // [1, 2, 5, 9, 10]
上面的 compare
函数会返回 -1
、1
或 0
,分别表示第一个参数比第二个参数小、大还是相等。这样,.sort()
方法就可以根据比较函数的返回值来确定数组元素的顺序。
.sort()
方法会改变原有数组的顺序。如果需要对数组进行排序但不希望改变原有数组,可以先复制一份副本再对副本进行操作。
const numbers = [10, 2, 5, 1, 9];
const sortedNumbers = [...numbers].sort((a, b) => a - b);
console.log(sortedNumbers); // [1, 2, 5, 9, 10]
console.log(numbers); // [10, 2, 5, 1, 9]
另外,.sort()
方法比较的是字符串,所以对于数字的排序可能会产生一些意想不到的结果。
const numbers = [10, 2, 5, 1, 9];
numbers.sort();
console.log(numbers); // [1, 10, 2, 5, 9]
上面的代码中,按照字符串排序后的结果是 [1, 10, 2, 5, 9]
,与我们期望的 [1, 2, 5, 9, 10]
不符。这时候需要使用比较函数来指定排序规则。
const fruits = ['banana', 'apple', 'orange', 'grape'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'grape', 'orange']
const numbers = [10, 2, 5, 1, 9];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 2, 5, 9, 10]
上面的示例分别演示了对字符串和数字的排序。
const users = [
{ name: 'Alice', age: 20 },
{ name: 'Bob', age: 25 },
{ name: 'Charlie', age: 18 },
];
users.sort((a, b) => a.age - b.age);
console.log(users);
// [
// { name: 'Charlie', age: 18 },
// { name: 'Alice', age: 20 },
// { name: 'Bob', age: 25 }
// ]
上面的代码中,使用比较函数对 users
数组按照年龄排序。
const arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
const sortedArr = [...new Set(arr)].sort((a, b) => a - b);
console.log(sortedArr); // [1, 2, 3, 4, 5, 6, 9]
上面的代码中,使用 Set
对数组进行去重,再使用 .sort()
方法进行排序。注意这里使用了扩展运算符 ...
来创建 sortedArr
数组的副本,以避免改变原有数组。