Array.prototype.every()
Метод every()
(кожний) примірників Array
перевіряє, чи всі елементи масиву проходять перевірку, реалізовану наданою функцією. Повертає булеве значення.
Спробуйте його в дії
Синтаксис
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()
є узагальненим. Він лишень очікує, що значення 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
Використання третього аргументу callbackFn
Аргумент array
корисний тоді, коли є потреба звернутися до іншого елемента масиву. Наступний приклад спочатку використовує filter()
, щоб видобути додатні значення, а потім – every()
, щоб перевірити, чи відсортований масив у порядку зростання.
const numbers = [-2, 4, -8, 16, -32];
const isIncreasing = numbers
.filter((num) => num > 0)
.every((num, idx, arr) => {
// Без аргументу arr немає способу легко отримати доступ до
// проміжного масиву без збереження його в змінній.
if (idx === 0) return true;
return num > arr[idx - 1];
});
console.log(isIncreasing); // true
Використання every() на розріджених масивах
every()
не запустить свій предикат на порожніх комірках.
console.log([1, , 3].every((x) => x !== undefined)); // true
console.log([2, , 2].every((x) => x === 2)); // true
Виклик every() на об'єктах-немасивах
Метод every()
зчитує з this
властивість length
, а потім звертається до кожної властивості, чий ключ є невід'ємним цілим числом, меншим за length
, поки не будуть перебрані вони всі або callbackFn
не поверне false
.
const arrayLike = {
length: 3,
0: "a",
1: "b",
2: "c",
3: 345, // ігнорується every(), оскільки length – 3
};
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 |