Array.prototype.every()

Метод every() (кожний) перевіряє, чи всі елементи масиву проходять перевірку, реалізовану наданою функцією. Повертає булеве значення.

Спробуйте його в дії

Синтаксис

every(callbackFn)
every(callbackFn, thisArg)

Параметри

callbackFn (функція зворотного виклику)

Функція для виконання на кожному елементі масиву. Вона повинна повертати значення істинності, аби показати, що елемент проходить перевірку, інакше – значення хибності. Ця функція викликається з наступними аргументами:

element (елемент)

Поточний елемент масиву, що обробляється.

index (індекс)

Індекс поточного елемента масиву, що обробляється.

array (масив)

Масив, на котрому викликали every().

thisArg (аргумент this) Необов'язкове

Значення, що буде використовуватись як this при виконанні callbackFn. Докладніше про це – в ітеративних методах

Повернене значення

true, якщо callbackFn повертає значення істинності для кожного елемента масиву. Інакше – false.

Опис

Метод every() є ітеративним методом. Він викликає передану функцію callbackFn один раз для кожного елемента в масиві, поки callbackFn не поверне значення хибності. Якщо такий елемент знайдено, то every() негайно повертає false та зупиняє ітерування масиву. Інакше – якщо callbackFn повертає значення істинності для всіх елементів, то every() повертає true.

every діє як квантор загальності в математиці. Наприклад, для порожнього масиву він повертає true. (Є порожньою істиною те, що всі елементи порожньої множини задовольняють будь-яку умову.)

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

every() не змінює масив, на котрому викликаний, але функція, передана як callbackFn, може це робити. Проте зверніть увагу на те, що довжина масиву зберігається до першого заклику callbackFn. Таким чином:

  • callbackFn не оброблятиме жодних елементів, доданих поза початковою довжиною масиву, актуальною на мить початку виклику every().
  • Зміни до вже оброблених індексів не призведуть до повторного заклику на них callbackFn.
  • Коли наявний, ще не оброблений елемент масиву змінюється функцією callbackFn, то значення такого елемента, передане в callbackFn, буде значенням, актуальним на ту мить, коли цей елемент обробляється. Видалені елементи – не обробляються.

Застереження: Паралельні зміни такого роду, як описано в попередньому абзаці, часто призводять до важкого для розуміння коду, їх в цілому слід уникати (крім особливих випадків).

Метод every() є узагальненим. Він лишень очікує, що значення this матиме властивість length, а також властивості з цілочисловими ключами.

Приклади

Перевірка розміру всіх елементів масиву

Наступний приклад перевіряє, чи всі елементи масиву більші за 10.

function isBigEnough(element, index, array) {
  return element >= 10;
}
[12, 5, 8, 130, 44].every(isBigEnough); // false
[12, 54, 18, 130, 44].every(isBigEnough); // true

Перевірка того, чи є один масив підмножиною іншого

Наступний приклад перевіряє, чи всі елементи масиву присутні в іншому масиві.

const isSubset = (array1, array2) =>
  array2.every((element) => array1.includes(element));

console.log(isSubset([1, 2, 3, 4, 5, 6, 7], [5, 7, 6])); // true
console.log(isSubset([1, 2, 3, 4, 5, 6, 7], [5, 8, 7])); // false

Використання every() на розріджених масивах

every() не запустить свій предикат на порожніх комірках.

console.log([1, , 3].every((x) => x !== undefined)); // true
console.log([2, , 2].every((x) => x === 2)); // true

Вплив на початковий масив (зміни, додавання елементів у кінець та видалення)

Наступні приклади перевіряють поведінку метода every, коли до масиву вносяться зміни.

// ---------------
// Зміни елементів
// ---------------
let arr = [1, 2, 3, 4];
arr.every((elem, index, arr) => {
  arr[index + 1]--;
  console.log(`[${arr}][${index}] -> ${elem}`);
  return elem < 2;
});

// Цикл виконується тричі, але
// виконався би двічі, якби зміни не вносилися
//
// 1 ітерація: [1,1,3,4][0] -> 1
// 2 ітерація: [1,1,2,4][1] -> 1
// 3 ітерація: [1,1,2,3][2] -> 2

// ---------------
// Додавання елементів у кінець
// ---------------
arr = [1, 2, 3];
arr.every((elem, index, arr) => {
  arr.push("новий");
  console.log(`[${arr}][${index}] -> ${elem}`);
  return elem < 4;
});

// Цикл виконується тричі, навіть після додавання нових елементів
//
// 1 ітерація: [1, 2, 3, новий][0] -> 1
// 2 ітерація: [1, 2, 3, новий, новий][1] -> 2
// 3 ітерація: [1, 2, 3, новий, новий, новий][2] -> 3

// ---------------
// Видалення елементів
// ---------------
arr = [1, 2, 3, 4];
arr.every((elem, index, arr) => {
  arr.pop();
  console.log(`[${arr}][${index}] -> ${elem}`);
  return elem < 4;
});

// Цикл виконується лише двічі, оскільки решта
// елементів усунуті `pop()`
//
// 1 ітерація: [1,2,3][0] -> 1
// 2 ітерація: [1,2][1] -> 2

Виклик every() на об'єктах-немасивах

Метод every() зчитує з this властивість length, а потім звертається до кожної цілочислової властивості, поки не буде досягнено кінця або callbackFn не поверне false.

const arrayLike = {
  length: 3,
  0: "a",
  1: "b",
  2: "c",
};
console.log(
  Array.prototype.every.call(arrayLike, (x) => typeof x === "string")
); // true

Специфікації

Сумісність із браузерами

desktop mobile server
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet Deno Node.js
every
Chrome Full support 1
Edge Full support 12
Firefox Full support 1.5
Internet Explorer Full support 9
Opera Full support 9.5
Safari Full support 3
WebView Android Full support 37
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0

Дивіться також