Метод every() у масиві
every() перевіряє, що всі елементи масиву задовольняють умову, яку задає передана функція-колбек. Якщо кожен елемент повертає true, метод повертає true; якщо хоча б один елемент не підходить, метод повертає false і зупиняє подальшу перевірку.
Теорія
TL;DR
every()повертаєtrue, лише коли умову виконують усі елементи.- На першому ж
falseвід колбека перебір зупиняється. - Метод не змінює вихідний масив і завжди повертає boolean.
- Для порожнього масиву результат
true, це відома особливість, яку часто питають. some()це «хоча б один»,every()це «усі».
Швидкий приклад
Перевіримо, чи складається масив лише з парних чисел.
const numbers = [2, 4, 6, 8];
const allEven = numbers.every(num => num % 2 === 0);
console.log(allEven); // trueЯкщо додати непарне число, результат одразу стає хибним:
[2, 4, 5, 8].every(n => n % 2 === 0); // falseСигнатура і важливі моменти
array.every((element, index, array) => {
// return true or false
});Те, що варто сказати на співбесіді:
every()не змінює вихідний масив.- Щойно трапляється елемент, для якого колбек повернув
false, виконання припиняється. - Метод повертає boolean, а не елемент і не масив.
- Він працює саме з логічним результатом колбека, тож будь-яке повернуте значення трактується як truthy або falsy.
- Для порожнього масиву
every()повертаєtrue.
Приклад із реальної розробки
Перевірка, чи всі користувачі пройшли верифікацію.
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() перевіряє твердження «усі елементи задовольняють умову». Якщо елементів немає, то немає й жодного елемента, який цю умову порушує, тому результат вважається істинним за замовчуванням.
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на непорожньому масиві.
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.
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(). Заміна одного методу іншим не викликає помилки, але тихо перевертає логіку перевірки, і баг помічають уже в продакшені.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.