JavaScript 数组排序是稳定的吗
Javascript数组排序是稳定的: 从版本10(或ECMAScript 2019)开始,规范要求Array.prototype.sort是稳定的。在Javascript中,稳定排序是指如果一个具有(键,值)对的数组对象具有相等的键,则在排序输出中以它们在输入数据集中出现的顺序相同。因此,它可靠地用于对键值对进行排序。
JavaScript数组sort()方法 用于根据compare()函数所指定的顺序对数组进行排序。如果方法被省略,则数组按升序排序。
在版本10(或ECMA 2019)之前,排序的稳定性不能保证,即有时显示稳定性,有时不显示。因此,它将给出错误的输出。
语法:
Array.sort()
示例 1: 在这个示例中,我们展示了在版本 10 之前的排序方式。
Javascript
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 }, / Original order not maintained
{ name: 'Riya', Age: 20 }, // Original order not maintained
{ name: 'Kavya', Age: 21 },
{ name: 'Mansi', Age: 22 }
]
该示例由于稳定性在早期版本中不可靠而改变了顺序。因此,它不稳定。
示例2: 在这个示例中,sort()方法展示了排序的稳定性。
JavaScript
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: 'Riya', Age: 20 },
{ name: 'Sanya', Age: 20 },
{ name: 'Kavya', Age: 21 },
{ name: 'Mansi', Age: 22 }
]
上面的示例已经按名称排序,但是当我们使用比较函数按年龄排序时,输出不会改变名称的顺序(’Riya’和’Sanya’)。这显示了排序的稳定性。
示例3: 在这个示例中,它展示了排序的稳定性。
Javascript
const fruits = [
{ name: "Apple", cost: 100 },
{ name: "Banana", cost: 60 },
{ name: "Pineapple", cost: 200 },
{ name: "Pears", cost: 200 },
{ name: "Pomegranate", cost: 200 },
{ name: "Strawberry", cost: 150 },
];
fruits.sort((a, b) => a.cost - b.cost);
console.log(fruits);
输出:
[
{ name: 'Banana', cost: 60 },
{ name: 'Apple', cost: 100 },
{ name: 'Strawberry', cost: 150 },
{ name: 'Pineapple', cost: 200 }, // Original order maintained
{ name: 'Pears', cost: 200 }, // Original order maintained
{ name: 'Pomegranate', cost: 200 } // Original order maintained
]
在上面的例子中,名称已经按字母顺序排序,但是当我们使用比较函数进行排序时,名称的顺序不会改变,这意味着JavaScript中的排序是稳定的。