📜  JavaScript Array sort()方法(1)

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

JavaScript Array sort()方法

JavaScript 中的 Array 对象拥有 sort() 方法,用于对数组的元素进行排序。sort() 方法默认排序的方式是将元素转换为字符串,然后按 Unicode 值递增排序。但是它也可以传入一个自定义的比较函数来实现不同的排序方式。在本文中,我们将详细介绍如何使用 sort() 方法。

基本用法

sort() 方法不会创建新数组,而是将原始数组中的元素进行排序。

const arr = [2, 3, 1, 4];
arr.sort();
console.log(arr); // [1, 2, 3, 4]

在上述示例中,我们首先定义了一个包含四个数字的数组。然后,我们对该数组调用 sort() 方法。由于我们没有传递任何参数,sort() 方法将按 Unicode 值对数组的元素进行排序。

注意, sort() 方法是就地排序,不会返回新的数组。因此,我们可以看到 arr 数组已经被排序。

自定义排序

sort() 方法可以接受一个比较函数作为参数。比较函数应该返回负数、零或正数,表示第一个参数比第二个参数小、相等或大,从而决定它们应该被排序的顺序。

const arr = [
  { name: 'Alice', age: 20 },
  { name: 'Bob', age: 30 },
  { name: 'Charlie', age: 10 }
];

arr.sort((a, b) => a.age - b.age);

console.log(arr);
// [
//   { name: 'Charlie', age: 10 },
//   { name: 'Alice', age: 20 },
//   { name: 'Bob', age: 30 }
// ]

上面的代码中,我们定义了一个包含三个对象的数组。每个对象都包含一个名字和年龄属性。

我们传递了一个函数作为参数,该函数接受两个参数,即要比较的两个对象。该函数返回一个数字,根据它们的年龄属性,我们决定他们的顺序。

注意,比较函数会影响 sort() 方法对数组的原始排序。

相等值的顺序

如果数组中有两个或多个相同的值,它们的顺序可能不是相对的。也就是说,它们可能在排序时被交换。

const arr = [3, 2, 3, 1, 2];
arr.sort();
console.log(arr); // [1, 2, 2, 3, 3]

在上述示例中,我们有一个包含五个数字的数组,其中有两个 2 和两个 3。我们对该数组进行排序,sort() 方法将数字转换为字符串,并对它们进行排序。由于字符串 "2" 比字符串 "3" 小,因此两个 2 将被放在两个 3 之前。

数组的排序稳定性

sort() 方法的稳定性,指的是在排序相等元素的情况下,是否会保持他们在原始数组中的相对顺序。

const arr = [
  { name: 'Alice', age: 20 },
  { name: 'Bob', age: 30 },
  { name: 'Charlie', age: 20 }
]

arr.sort((a, b) => {
  if (a.age === b.age) {
    return 0;
  } else if (a.age < b.age) {
    return -1;
  } else {
    return 1;
  }
});

console.log(arr);
// [
//   { name: 'Alice', age: 20 },
//   { name: 'Charlie', age: 20 },
//   { name: 'Bob', age: 30 }
// ]

在上面的示例中,我们有一个包含三个对象的数组。其中两个对象的 age 属性值相等。我们传递了一个比较函数,用于比较对象的 age 属性。由于两个具有相等 age 属性的对象始终返回 0,因此 sort() 方法应该保持他们的顺序不变。

结论

sort() 方法是 JavaScript 中 Array 对象的一个很有用的方法。它可以对数组的元素进行排序,并且可以自定义排序方式。在使用 sort() 方法时,我们应该注意其稳定性和相等值的顺序。