Всі ми любимо когось: методи every і some в масивах JavaScript

300

Від автора: найчастіше в JavaScript потрібно просіяти масив і визначити, чи є в ньому елементів, що задовольняють певним умовам, значення в заданому проміжку або ж дізнатися, чи збігаються всі комірки масиву з чим-небудь. З одного боку, можна піти звичайним шляхом і прогнати масив в циклі, перевіряючи кожне значення (цикл for), ну або використовувати більш сучасний метод forEach. Однак є спосіб набагато краще: методи every і some, з допомогою яких можна одержувати миттєвий відповідь на поставлені умови.

Метод every

Приміром, у нас є масив віку:

var ages = [ 21, 18, 32, 45, 56 ];

Потрібно перевірити всі осередки досягли «повноліття (18 років чи старше), тоді в консолі можна написати наступний код з допомогою стрілок:

ages.every(age => age >= 18)
> true

Результат буде або true, або false, тобто рядок вище можна було б записати через умова:

if (ages.every(age => age >= 18)) {
// перетворення
}

У методі every є колбек, а значить, порівняння можна проводити і у зовнішніх функціях. Приміром, у нас є JSON масив комах:

var insects = [
{ name: “Monarch”, order: “Lepidoptera” },
{ name: “Chinese silkworm moth”, order: “Lepidoptera” },
{ name: “Common Buckeye”, order: “Lepidoptera” },
{ name: “Колібрі Hawk-moth”, order: “Lepidoptera” }
];

Необхідно переконатися, що всі комахи в структурі відносяться до груп лускокрилих (Lepidoptera, сімейство метеликів і метеликів). Можна написати функцію:

function isButterflyOrMoth(element) {
return (element.order === “Lepidoptera”);
}

Прикріплюємо функцію до масиву і показуємо результат через консоль:

console.log(insects.every(isButterflyOrMoth));

У нашому випадку повернеться true.

Метод some

Точно так само можна перевірити, що хоча б частина елементів (some масиву задовольняє заданій умові. Скажімо, нам треба визначити, що хоча б одне значення менше 30. Масив залишився той самий:

var ages = [ 21, 18, 32, 45, 56 ];

Варто зазначити, що метод all ні метод some не змінюють масив; вони тільки перевіряють його на збіг умові. Нам потрібно дізнатися, якщо хоча б одне значення, менше 30:

ages.some(age => age true

Метод some припиняє роботу при знаходженні першого збігу в масиві. Точно так само його можна використовувати для пошуку в масиві заданого значення. В заданому масиві містяться грецькі музи:

var muses = [“Calliope”, “Clio”, “Euterpe”, “Thalia”, “Melpomene”,
“Terpsichore”, “Erato”, “Polyhymnia”, “Urania”];

Перевірити масив на задане значення можна з допомогою функції:

function isPresent(array, val) {
return array.some(arrVal => val === arrVal);
}

Ми можемо перевіряти масив на задане значення за допомогою функції isPresent, передаючи в якості аргументів їй масив і значення для пошуку:

isPresent(muses, “Calliope”);
> true

Підтримка

Обидва методу чудово підтримуються браузерами: всі сучасні браузери, включаючи IE9+. (Для IE8 є полифил).