JavaScript Сортування масивів
Сортування масиву
Метод sort()
сортує масив по алфавіту:
Реверс масиву
Метод reverse()
змінює місцями елементи в масиві.
Ви можете використовувати його для сортування масиву в порядку убування:
Приклад
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();
Спробуйте самі »
Числове сортування
За замовчуванням функція sort()
сортує значення як рядки.
Це добре підходить для рядків ("Apple" йде перед "Banana").
Однак, якщо числа відсортовані як рядки, "25" є більше, ніж "100", тому що "2" є більше, ніж "1".
Із-за цього метод sort()
буде давати невірний результат при сортуванні чисел.
Ви можете виправити це, надавши функцію зрівняння:
Приклад
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
Спробуйте самі »
Використовуйте той самий спосіб для сортування масиву за убуванням:
Приклад
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
Спробуйте самі »
Функція зрівняння
Ціль функції зрівняння - визначити альтернативний порядок сортування.
Функція зрівняння має повертати негативне, нульове або позитивне значення в залежності від аргументів:
function(a, b){return a - b}
Коли функція sort()
порівнює два значення, вона відправляє значення в функцію зрівняння, та сортує значення відповідно до поверненого (негативного, нульового, позитивного) значення.
Якщо результат негативний a
сортується перед b
.
Якщо результат позитивний b
сортується перед a
.
Якщо результат дорівнює 0, то порядок сортування двох значень не змінюється.
Приклад:
Функція зрівняння порівнює всі значення в масиві, по два значення за раз (a, b)
.
Коли порівнюються 40 та 100, метод sort()
викликає функцію зрівняння (40, 100).
Функція обраховує 40 - 100 (a - b)
, та оскільки результат негативний (-60), функція сортування відсортує 40 як значення, менше ніж 100.
Ви можете використовувати цей фрагмент коду, щоб поекспериментувати з числовим та алфавітним сортуванням:
<button onclick="myFunction1()">Сортувати по алфавіту</button>
<button onclick="myFunction2()">Сортувати по числу</button>
<p id="demo"></p>
<script>
const points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;
function myFunction1() {
points.sort();
document.getElementById("demo").innerHTML = points;
}
function myFunction2() {
points.sort(function(a, b){return a - b});
document.getElementById("demo").innerHTML = points;
}
</script>
Спробуйте самі »
Сортування масиву рандомно (у випадковому порядку)
Приклад
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()});
Спробуйте самі »
Метод Фішера Йєйтса (Fisher Yates)
Наведений вище приклад array.sort() не є точним, деякі числа мають перевагу над іншими.
Найбільш популярний коректний метод, який називається перетасуванням Фішера Йетса (Fisher Yates), і був введений в науку про дані ще в 1938 році!
В JavaScript метод можна перекласти ось так:
Приклад
const points = [40, 100, 1, 5, 25, 10];
for (let i = points.length -1; i > 0; i--) {
let j = Math.floor(Math.random() * i)
let k = points[i]
points[i] = points[j]
points[j] = k
}
Спробуйте самі »
Знайти найбільше або найменше значення масиву
Немає вбудованих функцій для пошуку максимального або мінімального значення в масиві.
Однак, після того, як ви відсортували масив, ви можете використовувати індекс для отримання найбільшого і найменшого значень.
Сортування за зростанням:
Приклад
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// тепер points[0] містить найменше значення
// та points[points.length-1] містить найбільше значення
Спробуйте самі »
Сортування за убуванням:
Приклад
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// тепер points[0] містить найбільше значення
// та points[points.length-1] містить найменше значення
Спробуйте самі »
Сортування всього масиву - дуже неефективний метод, якщо ви лише хочете знайти найбільше (або найменше) значення.
Використання Math.max() в масиві
Ви можете використовувати Math.max.apply
щоб знайти найбільше число в масиві:
Math.max.apply(null, [1, 2, 3])
еквівалентно Math.max(1, 2, 3)
.
Використання Math.min() в масиві
Ви можете використовувати Math.min.apply
щоб знайти найменше число в масиві:
Math.min.apply(null, [1, 2, 3])
еквівалентно Math.min(1, 2, 3)
.
Власні Min / Max JavaScript методи
Найшвидшим рішенням є використання методу "home made" ("зроблено самим").
Ця функція переглядає масив, порівнюючи кожне значення з найбільшим знайденим значенням:
Приклад (Знайти Max-значення)
function myArrayMax(arr) {
let len = arr.length;
let max = -Infinity;
while (len--) {
if (arr[len] > max) {
max = arr[len];
}
}
return max;
}
Спробуйте самі »
Ця функція переглядає масив, порівнюючи кожне значення з найменшим знайденим значенням:
Приклад (Знайти Min-значення)
function myArrayMin(arr) {
let len = arr.length;
let min = Infinity;
while (len--) {
if (arr[len] < min) {
min = arr[len];
}
}
return min;
}
Спробуйте самі »
Сортування масивів об’єктів
JavaScript масиви часто містять об’єкти:
Приклад
const cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}
];
Навіть якщо об’єкти мають властивості різних типів даних, метод sort()
можна використовувати для сортування масиву.
Рішення є в тому, щоб написати функцію зрівняння для порівняння значень властивостей:
Порівняння властивостей рядків є дещо складнішим:
Приклад
cars.sort(function(a, b){
let x = a.type.toLowerCase();
let y = b.type.toLowerCase();
if (x < y) {return -1;}
if (x > y) {return 1;}
return 0;
});
Спробуйте самі »
Повний довідник масиву
Для більш детальної інформації про масиви, відвідайте:
Повний довідник JavaScript масиву.
Довідник містить описи та приклади всіх властивостей та методів масиву.