Skip to main content

Метод every() у масиві

every() перевіряє, що всі елементи масиву задовольняють умову, яку задає передана функція-колбек. Якщо кожен елемент повертає true, метод повертає true; якщо хоча б один елемент не підходить, метод повертає false і зупиняє подальшу перевірку.

Теорія

TL;DR

  • every() повертає true, лише коли умову виконують усі елементи.
  • На першому ж false від колбека перебір зупиняється.
  • Метод не змінює вихідний масив і завжди повертає boolean.
  • Для порожнього масиву результат true, це відома особливість, яку часто питають.
  • some() це «хоча б один», every() це «усі».

Швидкий приклад

Перевіримо, чи складається масив лише з парних чисел.

javascript
const numbers = [2, 4, 6, 8]; const allEven = numbers.every(num => num % 2 === 0); console.log(allEven); // true

Якщо додати непарне число, результат одразу стає хибним:

javascript
[2, 4, 5, 8].every(n => n % 2 === 0); // false

Сигнатура і важливі моменти

javascript
array.every((element, index, array) => { // return true or false });

Те, що варто сказати на співбесіді:

  • every() не змінює вихідний масив.
  • Щойно трапляється елемент, для якого колбек повернув false, виконання припиняється.
  • Метод повертає boolean, а не елемент і не масив.
  • Він працює саме з логічним результатом колбека, тож будь-яке повернуте значення трактується як truthy або falsy.
  • Для порожнього масиву every() повертає true.

Приклад із реальної розробки

Перевірка, чи всі користувачі пройшли верифікацію.

javascript
const users = [ { name: 'Alex', verified: true }, { name: 'John', verified: true }, { name: 'Kate', verified: false }, ]; const allVerified = users.every(u => u.verified); console.log(allVerified); // false

Перебір зупиняється на Kate, бо вже зрозуміло, що умова «усі верифіковані» порушена.

Чому порожній масив дає true

every() перевіряє твердження «усі елементи задовольняють умову». Якщо елементів немає, то немає й жодного елемента, який цю умову порушує, тому результат вважається істинним за замовчуванням.

javascript
console.log([].every(x => x > 0)); // true

Цю властивість називають порожньою істиною (vacuous truth). На практиці це означає, що перед every() часто потрібна окрема перевірка на непорожність масиву, інакше «усі позиції оплачені» буде правдою для замовлення без позицій.

Різниця між every() і some()

  • some() вимагає, щоб умові відповідав хоча б один елемент.
  • every() вимагає, щоб умові відповідали всі елементи.
  • Якщо every() повернув true, то some() для тієї самої умови поверне true на непорожньому масиві, але на порожньому масиві every() дасть true, а some() дасть false.
  • Якщо some() повернув false, це означає, що жоден елемент не підходить, тож every() для тієї самої умови теж буде false на непорожньому масиві.
javascript
const ages = [18, 22, 30, 16]; console.log(ages.every(age => age >= 18)); // false, не всі дорослі console.log(ages.some(age => age < 18)); // true, є хоча б один неповнолітній

Типові помилки

1. Забути про порожній масив. Валідація на кшталт items.every(i => i.isValid) пропустить порожній список як коректний. Додавайте перевірку items.length > 0, коли це має значення.

2. Забутий return у колбеку з фігурними дужками. Колбек повертає undefined, значення falsy, тож результат завжди false.

javascript
arr.every(num => { num > 5 }); // завжди false

Правильно: arr.every(num => num > 5) або arr.every(num => { return num > 5 }).

3. Очікувати від every() елемент або масив. Метод повертає лише true чи false; щоб отримати елемент, потрібен find(), щоб отримати підмножину, потрібен filter().

4. Плутати з some(). Заміна одного методу іншим не викликає помилки, але тихо перевертає логіку перевірки, і баг помічають уже в продакшені.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.