JavaScript 数组排序是稳定的吗

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中的排序是稳定的。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程