Сортування масиву JavaScript ()

Метод сортування масиву JavaScript () сортує елементи масиву.

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)

Тут ми бачимо, що масив імен сортується у порядку зростання рядка. Наприклад, Адам постає перед Данілом, тому що "А" стоїть перед "Д".

Оскільки всі невизначені елементи перетворюються в рядки перед їх сортуванням, 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працює додатковий .

Будь-який 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 ().

Цікаві статті...