Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Метод every() у масиві». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**`every()` перевіряє, що всі елементи масиву задовольняють умову з колбека, і повертає `true` або `false`.** Якщо кожен елемент дає `true`, метод повертає `true`; щойно трапляється елемент, для якого колбек повернув `false`, перевірка зупиняється і результат `false`. Вихідний масив не змінюється, а на порожньому масиві `every()` повертає `true`. ```javascript const numbers = [2, 4, 6, 8]; console.log(numbers.every(num => num % 2 === 0)); // true ``` **Ключове:** `every()` це «усі», `some()` це «хоча б один», і порожній масив дає `true` через принцип порожньої істини.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**`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()`.** Заміна одного методу іншим не викликає помилки, але тихо перевертає логіку перевірки, і баг помічають уже в продакшені.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.