Метод sort () JavaScript Array сортирует элементы массива.
sort()
Метод сортирует элементы данного массива в определенном порядке возрастания или убывания.
Синтаксис sort()
метода:
arr.sort(compareFunction)
Здесь arr - это массив.
sort () Параметры
sort()
Метод принимает в:
- compareFunction (необязательно) - используется для определения настраиваемого порядка сортировки.
Возвращаемое значение из sort ()
- Возвращает массив после сортировки элементов массива на месте (это означает, что он изменяет исходный массив, и копирование не производится).
Пример 1: Сортировка элементов массива
Если compareFunction не передается,
- Все
undefined
элементы, не являющиеся элементами массива, сначала преобразуются в строки. - Затем эти строки сравниваются с использованием их значения кодовой точки UTF-16.
- Сортировка производится по возрастанию.
- Все
undefined
элементы отсортированы до конца массива.
// sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); // returns the sorted array console.log(names.sort()); // modifies the array in place console.log(names); var priceList = (1000, 50, 2, 7, 14); priceList.sort(); // Number is converted to string and sorted console.log(priceList)
Вывод
('Адам', 'Бен', 'Данил', 'Фабиано', 'Джеффри') ('Адам', 'Бен', 'Данил', 'Фабиано', 'Джеффри') (1000, 14, 2, 50 , 7)
Здесь мы видим, что массив имен отсортирован в порядке возрастания строки. Например, Адам идет перед Данилом, потому что «А» стоит перед «D».
Поскольку все не неопределенные элементы перед сортировкой преобразуются в строки, Number
типы данных сортируются в этом порядке.
Здесь мы видим, что хотя 1000 численно больше 50 , оно находится в начале отсортированного списка. Это потому, что «1» <«5» .
Пример 2: Сортировка с использованием пользовательской функции
Когда передается compareFunction,
- Все
undefined
элементы, не являющиеся элементами массива, сортируются в соответствии с возвращаемым значением compareFunction. - Все неопределенные элементы сортируются до конца массива, и compareFunction для них не вызывается.
Предположим, мы хотим отсортировать указанный выше массив имен так, чтобы самое длинное имя было последним, а не сортировать его по алфавиту. Сделать это можно следующим образом:
// custom sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); function len_compare(a, b)( return a.length - b.length; ) // sort according to string length names.sort(len_compare); console.log(names);
Вывод
('Бен', 'Адам', 'Данил', 'Джеффри', 'Фабиано')
Здесь сортировка основана на логике a.length - b.length
. По сути, это означает, что элемент с меньшей длиной будет отображаться в начале Array
.
Давайте сначала разберемся, как compareFunction
работает опция .
Any compareFunction
имеет следующий синтаксис:
function (a, b)( // sorting logic // return a Number )
sort()
Метод сравнивает все значения массива, передавая два значения в то время , к compareFunction
. Два параметра a и b представляют эти два значения соответственно.
compareFunction
Должен возвращать Number
. Это возвращаемое значение используется для сортировки элементов следующим образом:
- Если возвращаемое значение <0 , a сортируется до b (a идет до b).
- Если возвращаемое значение> 0 , b сортируется до a (b идет до a).
- Если возвращаемое значение == 0 , a и b остаются неизменными относительно друг друга.
В примере 2 мы сортируем массив, используя:
function len_compare(a, b)( return a.length - b.length; )
Вот:
- Если a.length - b.length <0 , a стоит перед b. Например, «Адам» предшествует «Джеффри» как 4-7 <0 .
- Если a.length - b.length> 0 , b идет перед a. Например, «Данил» идет после «Бена» как 5 - 3> 0.
- Если a.length - b.length == 0 , их положение не меняется. Например, взаимное расположение «Джеффри» и «Фабиано» не изменилось, потому что 7-7 == 0 .
Мы видим, что это приводит к сортировке строк по их длине в порядке возрастания.
Пример 3: числовая сортировка чисел
Поскольку все элементы, не являющиеся неопределенными, перед их сортировкой преобразуются в строки, мы не можем сортировать числа по их числовому значению по умолчанию.
Давайте посмотрим, как мы можем реализовать это с помощью пользовательской функции.
// numeric sorting // define array var priceList = (1000, 50, 2, 7, 14); // sort() using function expression // ascending order priceList.sort(function (a, b) ( return a - b; )); // Output: Ascending - 2,7,14,50,1000 console.log("Ascending - " + priceList); // sort() using arrow function expression // descending order priceList.sort((a, b) => b - a); // Output: Descending - 1000,50,14,7,2 console.log("Descending - " + priceList);
Вывод
По возрастанию - 2,7,14,50,1000 По убыванию - 1000,50,14,7,2
В этом примере мы отсортировали массив, используя:
function (a, b) ( return a - b; )
Вот,
- Если a - b <0 , a стоит перед b. Например, 2 стоит перед 7 как 2-7 <0 .
- Если a - b> 0 , b стоит перед a. Например, 1000 идет после 50, так как 1000-50> 0.
Мы видим, что это приводит к сортировке чисел в соответствии с их возрастающим числовым значением.
Точно так же мы можем использовать их b - a
для сортировки в порядке убывания. Обратите внимание, что мы также можем использовать выражение функции стрелки, определенное в ES2015.
Мы также можем перевернуть (в порядке убывания) отсортированный массив, используя встроенный reverse()
метод массива . Чтобы узнать больше, посетите JavaScript Array reverse ().