Метод sort
Метод sort производит сортировку массива в лексикографическом порядке и возвращает уже измененный массив. Необязательным параметром можно указать собственную функцию для сортировки.
Синтаксис
массив.sort([функция]);
Пример
Давайте посортируем массив:
let arr = [‘d’, ‘b’, ‘a’, ‘c’]; console.log(arr.sort());
Результат выполнения кода:
Пример
Давайте отсортируем массив с числами:
let arr = [4, 1, 7, 2]; console.log(arr.sort());
Результат выполнения кода:
Пример
Давайте добавим в массив числа и отсортируем его:
let arr = [1, 123, 2, 4, 111, 7]; console.log(arr.sort());
В результате выполнения кода мы увидим, что числа располагаются не в порядке возрастания, а в лексикографическом порядке, т.е. числа между собой сравниваются как строки. При этом сравнение идет по каждому символу, больше ли код первого символа, чем код соседнего и т.д. Результат:
[1, 111, 123, 2, 4, 7]
Пример
Теперь давайте отсортируем массив с помощью функции, в которой пропишем условие — если первый параметр больше второго, то его переставляем (для этого в return любое положительное число). В обратном случае перестановка не требуется и мы указываем 0 или любое отрицательное число:
let arr = [1, 123, 2, 4, 111, 7]; arr.sort(function(a, b) < if (a >b) < return 1; >else < return -1; >>); console.log(arr);
Результате выполнения кода:
[1, 2, 4, 7, 111, 123]
Пример
Давайте для удобства сократим код в нашей функции из предыдущего примера:
let arr = [1, 123, 2, 4, 111, 7]; arr.sort(function(a, b) < return a - b; >); console.log(arr);
Результате выполнения кода:
[1, 2, 4, 7, 111, 123]
Пример
А теперь с помощью функции отсортируем массив в порядке убывания:
let arr = [1, 123, 2, 4, 111, 7]; arr.sort(function(a, b) < return b - a; >); console.log(arr);
Результате выполнения кода:
[123, 111, 7, 4, 2, 1]
Пример
Давайте отсортируем массив объектов по ключу ‘one’ в порядке возрастания:
let arr = [
Результате выполнения кода:
Пример
А теперь давайте отсортируем массив объектов по ключу ‘two’ :
let arr = [
Результате выполнения кода:
Пример
Давайте проверим изменился ли массив после применения метода sort :
let arr = [‘b’, ‘a’, ‘d’, ‘c’]; let res = arr.sort(); console.log(arr);
Результат выполнения кода:
Смотрите также
- метод filter ,
который позволяет фильтровать элементы массива
sort()
Метод sort() сортирует элементы массива.
Порядок сортировки может быть буквенный, числовой, в порядке возрастания, или в порядке убывания.
По умолчанию метод sort() сортирует значения в виде строк в алфавитном порядке возрастания.
Это хорошо работает для строк ( «Blue» предшествует «Green»). Однако, если число сортируются как строки, «25» больше, чем «100», потому что «2» больше, чем «1».
Из-за этого, метод sort() будет производить неправильный результат при сортировке чисел.
Можно исправить это, применяя функцию compareFunction для определения порядка элементов.
Примечание: Этот метод изменяет исходный массив.
Поддержка браузеров

Синтаксис
Значения параметров
| Параметр | Описание |
| compareFunction |
Технические подробности
| Возвращаемое значение: | Массив с отсортированными элементами |
| Версия JavaScript: | ECMAScript 1 |
Дополнительные примеры
Сортировка чисел в массиве в порядке возрастания:
var items = [30, 100, 1, 5, 27, 10]; items.sort(function(a, b)); // 1,5,10,27,30,100
Сортировка чисел в массиве в порядке убывания:
var items = [30, 100, 1, 5, 27, 10]; items.sort(function(a, b)); // 100,30,27,10,5,1
Как работает метод sort в js
![]()
Метод sort() в JavaScript: сортировка элементов массива
16 июня 2023
Оценки статьи
Еще никто не оценил статью
В JavaScript, метод sort() применяется для сортировки элементов массива. Он позволяет упорядочить элементы в соответствии с заданным порядком сортировки. В этой статье мы рассмотрим использование метода sort() с примерами и объясним, как он работает.
Введение в метод sort()
Метод sort() является встроенным методом массивов в JavaScript. Он изменяет исходный массив, переставляя элементы в порядке сортировки.
Синтаксис метода sort()
Синтаксис метода выглядит следующим образом:
array.sort([compareFunction])
Где:
- array — массив, который нужно отсортировать.
- compareFunction (необязательный) — функция сравнения, определяющая порядок сортировки элементов массива. Если не указана, элементы массива сравниваются как строки.
Примеры использования метода sort()
Сортировка по умолчанию
Если не указана функция сравнения ( compareFunction ), метод sort() применяет сортировку по умолчанию, сравнивая элементы массива как строки. Результатом будет отсортированный массив в лексикографическом порядке.
Рассмотрим пример:
const fruits = ['яблоко', 'груша', 'банан', 'апельсин']; fruits.sort(); console.log(fruits); // Вывод: ['апельсин', 'банан', 'груша', 'яблоко']
В этом примере массив fruits сортируется в алфавитном порядке.
Функция сравнения
Если требуется определить собственный порядок сортировки, можно передать функцию сравнения ( compareFunction ) в метод sort() . Эта функция принимает два аргумента ( a и b ), которые представляют пару элементов для сравнения, и возвращает число, указывающее порядок сортировки.
Возвращаемое число определяет порядок следования элементов в итоговом отсортированном массиве:
Если возвращаемое значение отрицательное, элемент a будет располагаться перед элементом b . Если возвращаемое значение положительное, элемент b будет располагаться перед элементом a . Если возвращаемое значение равно нулю, порядок элементов не изменяется.
Рассмотрим пример с сортировкой чисел:
const numbers = [10, 5, 8, 3, 1]; numbers.sort((a, b) => a - b); console.log(numbers); // Вывод: [1, 3, 5, 8, 10]
В этом примере числа в массиве numbers сортируются в порядке возрастания. Функция сравнения (a, b) => a — b возвращает отрицательное число, когда a меньше b , что приводит к упорядочиванию элементов в возрастающем порядке.
Сортировка в обратном порядке
Для сортировки в обратном порядке можно использовать функцию сравнения, которая меняет порядок возвращаемого значения. Рассмотрим пример:
const numbers = [5, 2, 8, 1, 9]; numbers.sort((a, b) => b - a); console.log(numbers); // Вывод: [9, 8, 5, 2, 1]
В этом примере числа в массиве numbers сортируются в порядке убывания. Функция сравнения (a, b) => b — a возвращает положительное число, когда b меньше a , что приводит к упорядочиванию элементов в убывающем порядке.
Заключение
Метод sort() является мощным инструментом для сортировки элементов массива в JavaScript. Он позволяет упорядочить элементы в соответствии с заданным порядком сортировки и может быть использован для широкого спектра задач. Будь то сортировка строк, чисел или объектов, метод sort() предоставляет гибкость и контроль над процессом сортировки.
Меню категорий
-
Загрузка категорий.
Добро пожаловать в Блог Разработчика Владислава Александровича.
Ведется медленная, но уверенная разработка функционала сайта.
Django Core: 0.3.4 / Next.js 1.0 / UPD: 05.06.2023
Array.prototype.sort()
Метод sort() на месте сортирует элементы массива и возвращает отсортированный массив. Сортировка не обязательно устойчива (англ.). Порядок сортировки по умолчанию соответствует порядку кодовых точек Unicode.
Синтаксис
arr.sort([compareFunction])
Параметры
Необязательный параметр. Указывает функцию, определяющую порядок сортировки. Если опущен, массив сортируется в соответствии со значениями кодовых точек каждого символа Unicode, полученных путём преобразования каждого элемента в строку.
Возвращаемое значение
Отсортированный массив. Важно, что копия массива не создаётся — массив сортируется на месте.
Описание
Если функция сравнения compareFunction не предоставляется, элементы сортируются путём преобразования их в строки и сравнения строк в порядке следования кодовых точек Unicode. Например, слово «Вишня» идёт перед словом «бананы». При числовой сортировке, 9 идёт перед 80, но поскольку числа преобразуются в строки, то «80» идёт перед «9» в соответствии с порядком в Unicode.
var fruit = ["арбузы", "бананы", "Вишня"]; fruit.sort(); // ['Вишня', 'арбузы', 'бананы'] var scores = [1, 2, 10, 21]; scores.sort(); // [1, 10, 2, 21] var things = ["слово", "Слово", "1 Слово", "2 Слова"]; things.sort(); // ['1 Слово', '2 Слова', 'Слово', 'слово'] // В Unicode, числа находятся перед буквами в верхнем регистре, // а те, в свою очередь, перед буквами в нижнем регистре.
Если функция сравнения compareFunction предоставлена, элементы массива сортируются в соответствии с её возвращаемым значением. Если сравниваются два элемента a и b , то:
- Если compareFunction(a, b) меньше 0, сортировка поставит a по меньшему индексу, чем b , то есть, a идёт первым.
- Если compareFunction(a, b) вернёт 0, сортировка оставит a и b неизменными по отношению друг к другу, но отсортирует их по отношению ко всем другим элементам. Обратите внимание: стандарт ECMAscript не гарантирует данное поведение, и ему следуют не все браузеры (например, версии Mozilla по крайней мере, до 2003 года).
- Если compareFunction(a, b) больше 0, сортировка поставит b по меньшему индексу, чем a .
- Функция compareFunction(a, b) должна всегда возвращать одинаковое значение для определённой пары элементов a и b . Если будут возвращаться непоследовательные результаты, порядок сортировки будет не определён.
Итак, функция сравнения имеет следующую форму:
function compare(a, b) if (a меньше b по некоторому критерию сортировки) return -1; > if (a больше b по некоторому критерию сортировки) return 1; > // a должно быть равным b return 0; >
Для числового сравнения, вместо строкового, функция сравнения может просто вычитать b из a . Следующая функция будет сортировать массив по возрастанию:
function compareNumbers(a, b) return a - b; >
Метод sort можно удобно использовать с функциональными выражениями (и замыканиями):
var numbers = [4, 2, 5, 1, 3]; numbers.sort(function (a, b) return a - b; >); console.log(numbers); // [1, 2, 3, 4, 5]
Объекты могут быть отсортированы по значению одного из своих свойств.
var items = [ name: "Edward", value: 21 >, name: "Sharpe", value: 37 >, name: "And", value: 45 >, name: "The", value: -12 >, name: "Magnetic" >, name: "Zeros", value: 37 >, ]; items.sort(function (a, b) if (a.name > b.name) return 1; > if (a.name b.name) return -1; > // a должно быть равным b return 0; >);
Примеры
Пример: создание, отображение и сортировка массива
В следующем примере создаётся четыре массива, сначала отображается первоначальный массив, а затем они сортируются. Числовые массивы сортируются сначала без, а потом с функцией сравнения.
var stringArray = ["Голубая", "Горбатая", "Белуга"]; var numericStringArray = ["80", "9", "700"]; var numberArray = [40, 1, 5, 200]; var mixedNumericArray = ["80", "9", "700", 40, 1, 5, 200]; function compareNumbers(a, b) return a - b; > // снова предполагаем, что функция печати определена console.log("stringArray:", stringArray.join()); console.log("Сортировка:", stringArray.sort()); console.log("numberArray:", numberArray.join()); console.log("Сортировка без функции сравнения:", numberArray.sort()); console.log( "Сортировка с функцией compareNumbers:", numberArray.sort(compareNumbers), ); console.log("numericStringArray:", numericStringArray.join()); console.log("Сортировка без функции сравнения:", numericStringArray.sort()); console.log( "Сортировка с функцией compareNumbers:", numericStringArray.sort(compareNumbers), ); console.log("mixedNumericArray:", mixedNumericArray.join()); console.log("Сортировка без функции сравнения:", mixedNumericArray.sort()); console.log( "Сортировка с функцией compareNumbers:", mixedNumericArray.sort(compareNumbers), );
Этот пример произведёт следующий вывод. Как показывает вывод, когда используется функция сравнения, числа сортируются корректно вне зависимости от того, являются ли они собственно числами или строками с числами.
stringArray: Голубая,Горбатая,Белуга Сортировка: Белуга,Голубая,Горбатая numberArray: 40,1,5,200 Сортировка без функции сравнения: 1,200,40,5 Сортировка с функцией compareNumbers: 1,5,40,200 numericStringArray: 80,9,700 Сортировка без функции сравнения: 700,80,9 Сортировка с функцией compareNumbers: 9,80,700 mixedNumericArray: 80,9,700,40,1,5,200 Сортировка без функции сравнения: 1,200,40,5,700,80,9 Сортировка с функцией compareNumbers: 1,5,9,40,80,200,700
Пример: сортировка не-ASCII символов
Для сортировки строк с не-ASCII символами, то есть строк с символами акцента (e, é, è, a, ä и т.д.), строк, с языками, отличными от английского: используйте String.localeCompare . Эта функция может сравнивать эти символы, чтобы они становились в правильном порядке.
var items = ["réservé", "premier", "cliché", "communiqué", "café", "adieu"]; items.sort(function (a, b) return a.localeCompare(b); >); // items равен ['adieu', 'café', 'cliché', 'communiqué', 'premier', 'réservé']
Пример: сортировка c помощью map
Функция сравнения (compareFunction) может вызываться несколько раз для каждого элемента в массиве. В зависимости от природы функции сравнения, это может привести к высоким расходам ресурсов. Чем более сложна функция сравнения и чем больше элементов требуется отсортировать, тем разумнее использовать map для сортировки. Идея состоит в том, чтобы обойти массив один раз, чтобы извлечь фактические значения, используемые для сортировки, во временный массив, отсортировать временный массив, а затем обойти временный массив для получения правильного порядка.
// массив для сортировки var list = ["Дельта", "альфа", "ЧАРЛИ", "браво"]; // временный массив содержит объекты с позицией и значением сортировки var mapped = list.map(function (el, i) return index: i, value: el.toLowerCase() >; >); // сортируем массив, содержащий уменьшенные значения mapped.sort(function (a, b) if (a.value > b.value) return 1; > if (a.value b.value) return -1; > return 0; >); // контейнер для результа var result = mapped.map(function (el) return list[el.index]; >);
Спецификации
| Specification |
|---|
| ECMAScript Language Specification # sec-array.prototype.sort |
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
- Array.prototype.reverse()
- String.prototype.localeCompare()