Метод сортування масиву 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 ().