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

18

Від автора: найчастіше в 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 є полифил).