JavaScript метод sort()
JavaScript ArrayОпределение и применение
JavaScript метод sort() позволяет отсортировать массив путём преобразования его элементов в строки и сравнения этих строк в порядке следования кодовых символов Unicode (сортирует массив по алфавиту).
Обращаю Ваше внимание, что метод sort() не создает новый объект Array, а производит сортировку переданного массива. Элементы массива, которые не содержат элементов ("дыры") будут отсортированы после элементов, которые содержат значение.
Поддержка браузерами
Метод | Chrome | Firefox | Opera | Safari | IExplorer | Edge |
---|---|---|---|---|---|---|
sort() | Да | Да | Да | Да | 9.0 | Да |
JavaScript синтаксис:
// сортирует массив по алфавиту (в порядке следования кодовых символов Unicode) array.sort(); // сортирует с использованием функции сравнения array.sort( function( firstValue, secondValue ) );
Версия JavaScript
ECMAScript 1Значения параметров
Параметр | Описание |
---|---|
function( a, b ) | Функция, определяющую порядок сортировки элементов массива. Если функция сравнения используется (необязательный параметр), то должна возвращать одно из следующих значений:
|
Любая функция сравнения имеет следующую логику работы:
function compareFunction( a, b ) { if ( a меньше b по заданному критерию сортировки) { return -1; // первый сравниваемый элемент будет расположен по меньшему индексу } if ( a больше b по заданному критерию сортировки) { return 1; // второй сравниваемый элемент будет расположен по меньшему индексу } // если первый аргумент равен второму, то элементы массива останутся неизменными // по отношению друг к другу но будут отсортированы по отношению ко всем другим элементам return 0; }
Пример использования
В следующем примере с использованием JavaScript метода sort() мы рассмотрим как отсортировать массив по алфавиту от a до z, так и от z до a:
// инициализируем переменную, содержащую массив строковых значений var arr = ["b", "n", "a", "z", "m", "y", "c"]; // сортируем массив в порядке следования кодовых символов Unicode arr.sort() // ["a", "b", "c", "m", "n", "y", "z"] // размещаем элементы объекта Array в обратном порядке var reversed = arr.reverse() console.log( reversed ); // ["z", "y", "n", "m", "c", "b", "a"]
В следующем примере мы рассмотрим как происходит сортировка массива, который содержит пустые элементы ("дыры"):
// инициализируем переменную, содержащую массив строковых значений var arr = ["b", "n", "a", "z", "m", , "y", , "c"]; // сортируем массив в порядке следования кодовых символов Unicode arr.sort() // ["a", "b", "c", "m", "n", "y", "z",,,] два пустых значения в конце массива
В следующем примере мы рассмотрим как произвести сортировку массива, содержащего числовые значения в порядке возростания, или убывания значений:
// инициализируем переменную, содержащую массив числовых значений var numbers = [50, 4, 33, 88, 1, 11, 123]; // сортируем массив в порядке следования кодовых символов Unicode numbers.sort() // [1, 11, 123, 33, 4, 50, 88]
Обратите внимание, что числа внутри массива перед сортировкой преобразуются в строковые значения, например, "123" будет следовать перед "4" в соответствии с порядком установленным в Unicode. Для того, чтобы отсортировать числовые значения в порядке возрастания, или убывания нам необходимо использовать функцию, которая задаст критерий сортировки. Рассмотрим следущий пример:
// инициализируем переменную, содержащую массив числовых значений var numbers = [50, 4, 33, 88, 1, 11, 123]; // сортируем массив числовых значений в порядке возрастания numbers.sort(( a, b ) => a - b); // [1, 4, 11, 33, 50, 88, 123] // аналогично без использования стрелочной функции numbers.sort(function( a, b ) {return a - b}); // [1, 4, 11, 33, 50, 88, 123] // сортируем массив числовых значений в порядке убывания numbers.sort(( a, b ) => b - a); // [123, 88, 50, 33, 11, 4, 1] // аналогично без использования стрелочной функции numbers.sort(function( a, b ) {return b - a}); // [123, 88, 50, 33, 11, 4, 1]
В этом примере для сортировки числовых значений внутри массива по возрастанию и по убыванию, мы дополнительно используем аргумент метода sort(), содержащий специальную функцию для сравнения. Она принимает два параметра, которые определяют два текущих сравниваемых значения. Например, при сортировке по возрастанию, сравниваются значения 50 и 4, функция вычисляет 50 - 4, и возвращает положительное значение, в результате чего первое значение будет отсортировано после второго.
Во втором случае, при сортировке массива по убыванию при сравнении значений 50 и 4, функция вычисляет 4 - 50, и возвращает отрицательное значение, в результате чего первое значение будет отсортировано перед вторым.
Обратите внимание, что в этом примере мы использовали стрелочные функции, они позволяют сделать код более читабельным и компактным.
В следующем примере мы рассмотри как отсортировать массив объектов по определенному свойству как по алфавиту, так и по числовому значению:
// инициализируем переменную, содержащую массив объектов var items = [ {name: "Миша", age: 23}, {name: "Вася", age: 44}, {name: "Саша", age: 2}, {name: "Рома", age: 99}, {name: "Ашот", age: 19} ]; // сортируем объекты внутри массива по свойству name (по алфавиту) items.sort(( a, b ) => a.name > b.name) console.log( items ); // выводим в консоль результат сортировки [ {name: "Ашот", age: 19} {name: "Вася", age: 44} {name: "Миша", age: 23} {name: "Рома", age: 99} {name: "Саша", age: 20} ] // сортируем объекты внутри массива по свойству age (по возрастанию числовых значений) items.sort(( a, b ) => a.age - b.age); console.log( items ); // выводим в консоль результат сортировки [ {name: "Саша", age: 2} {name: "Ашот", age: 19} {name: "Миша", age: 23} {name: "Вася", age: 44} {name: "Рома", age: 99} ]JavaScript Array