Сортировка массива JavaScript ()

Метод 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 ().

Интересные статьи...