JavaScript 数组排序稳定吗?

83 阅读1分钟

从版本 10(或 ECMAScript 2019)开始,规范要求 Array.prototype.sort 稳定。在 javascript 中,稳定排序是指具有 (key, value) 对的数组对象具有相同的键,它们在排序输出中的出现顺序与它们在输入数据集中出现的顺序相同。因此对于键值对的排序是可靠的。

JavaScript Array sort() 方法用于根据 compare() 函数按指定顺序对数组进行排序。如果方法是 takeout 则数组按升序排序。

在版本 10(或 ECMA 2019)之前,无法保证排序稳定性,即有时显示稳定性,有时不显示。因此,对于给定的输入,它会给出错误的输出。

示例 1: 在此示例中,我们展示了版本 10 之前的排序方式。

const students = [
    { name: "Kavya", Age: 21 },
    { name: "Mansi", Age: 22 },
    { name: "Riya", Age: 20 },
    { name: "Sanya", Age: 20 },
];
  
// Compare function
students.sort((first, second) => (first.Age - second.Age));
console.log(students);

输出:

[ 
  { name: 'Sanya', Age: 20 }, / 不是原顺序
  { name: 'Riya', Age: 20 }, // 不是原顺序
  { name: 'Kavya', Age: 21 }, 
  { name : 'Mansi', 年龄: 22 } 
]

此示例更改其顺序,因为稳定性在早期版本中不可靠。因此,它不稳定。

示例 2: 在此示例中,sort() 方法显示了排序的稳定性。

与示例1代码相同

输出:

[ 
  { name: 'Riya', Age: 20 }, 
  { name: 'Sanya', Age: 20 }, 
  { name: 'Kavya', Age: 21 }, 
  { name: 'Mansi', Age: 22 } 
]

上面的示例已经按姓名排序,但是当我们使用比较函数对年龄排序时,输出不会更改姓名的顺序('Riya' 和 'Sanya')。这表明排序的稳定性。