📜  .sort javascript(1)

📅  最后修改于: 2023-12-03 15:13:04.432000             🧑  作者: Mango

JavaScript 中的 .sort()

在 JavaScript 中,.sort() 方法可以将数组按照升序或降序排列。本文将介绍 .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 函数会返回 -110,分别表示第一个参数比第二个参数小、大还是相等。这样,.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 数组的副本,以避免改变原有数组。