Javascript Array Sort стабилен: начиная с версии 10 (или ECMAScript 2019), спецификация требует, чтобы Array.prototype.sort был стабильным. В javascript стабильная сортировка — это если объекты массива с парой (ключ, значение) имеют одинаковые ключи, которые появляются в том же порядке в отсортированном выводе, что и во входном наборе данных. Поэтому он надежен для сортировки пар ключ-значение.
Метод JavaScript Array sort() используется для сортировки массива в указанном порядке в соответствии с функцией compare(). Если выбран метод takeout, массив сортируется по возрастанию.
До версии 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 } ]
Приведенный выше пример уже отсортирован по имени, но когда мы сортируем возраст с помощью функции сравнения, вывод не меняет порядок имен («Рия» и «Саня»). Это показывает стабильность в сортировке.
Пример 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 стабильна.