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 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 |