JavaScript метод sort()

JavaScript Array

Определение и применение

JavaScript метод sort() позволяет отсортировать массив путём преобразования его элементов в строки и сравнения этих строк в порядке следования кодовых символов Unicode (сортирует массив по алфавиту).


Обращаю Ваше внимание, что метод sort() не создает новый объект Array, а производит сортировку переданного массива. Элементы массива, которые не содержат элементов ("дыры") будут отсортированы после элементов, которые содержат значение.


Поддержка браузерами

МетодChrome
Chrome
Firefox
Firefox
Opera
Opera
Safari
Safari
Internet Explorer
IExplorer
Microsoft Edge
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