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 |