Метод every()
перевіряє, чи всі елементи масиву відповідають умові, що задана функцією, яка передається як аргумент. Повертає булеве значення.
function isBigEnough(element, index, array) {
return element >= 10;
}
[12, 5, 8, 130, 44].every(isBigEnough); // false
[12, 54, 18, 130, 44].every(isBigEnough); // true
Синтаксис
arr.every(callback(element[, index[, array]])[, thisArg])
Параметри
callback
- Функція, яка перевіряє кожен елемент масиву. Приймає три аргументи:
- element
- Поточний елемент, який обробляється в масиві.
index
Optional- Індекс поточного елемента, який обробляється в масиві.
array
Optional- Масив для якого був викликаний метод
every
.
thisArg
Optional- Значення, що використовується як
this
при виконанніcallback
.
Вертає
true
, якщо функція callback повернула правдиве значення для кожного елементу масиву; інакше, false
.
Опис
Метод every
виконує функцію callback
один раз для кожного елементу масиву поки не знайдено хоча б один елемент, функція callback
якого повертає хибне значення. Якщо такий елемент знайдено, метод every
одразу повертає false
. В іншому ж випадку, якщо функція callback
повернула правдиве значення для усіх елементів, every
повертає true
. Функція callback
викликається тільки для тих індексів масиву, які мають присвоєні значення; вона не викликається для тих індексів, котрі були видалені або котрим ніколи не присвоювалися значення.
Функція callback
викликається з трьома аргументами: значення елементу, індекс елементу в масиві і масив по якому робиться перебір.
Якщо параметр thisArg
переданий в every
, то він буде використовуватися функцією callback
як значення this
, коли та буде викликана. В іншому випадку буде передано значення undefined
як її значення this
. Значення this
зрештою видиме для функції callback
і визначається відповідно до звичайних правил для визначення this яке видиме функцією.
Метод every
не змінює масив, на якому він був викликаний.
Діапазон елементів, які обробляються методом every()
встановлюється перед першим виконанням функції callback
. Елементи, які додаються в масив після того, як метод every()
був викликаний, не будуть обходитися функцією callback
. Якщо існуючі елементи масиву змінилися, то їхні значення, які передаються в функцію callback
будуть значеннями на момент обходу їх методом every()
; якщо існуючі елементи масиву видалили, то метод every()
обходити їх не буде.
Метод every
схожий за дією на математичний символ "для кожного ". Зокрема, для порожнього масиву він повертає true. (Всі елементи порожнього набору задовольняють будь-якому заданому стану.)
Приклади
Перевірка значення кожного елементу масиву
Даний приклад перевіряє чи всі елементи масиву більші ніж 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
Викристання стрілочних функцій
Стрілочні функції надають коротший синтаксис для такої ж самої перевірки.
[12, 5, 8, 130, 44].every(x => x >= 10); // false
[12, 54, 18, 130, 44].every(x => x >= 10); // true
Поліфіл
Метод every
був доданий до ECMA-262 стандарту у 5-ій версії; як такий він може бути не реалізований в усіх реалізаціях стандарту. Ви можете обійти цю проблему, вставивши наступний код на початку ваших скриптів, що дозволить використовувати метод every
у тих версіях, які не підтримують його початково. Цей алгоритм є саме тим, що зазначений у ECMA-262, 5-ій версії, за умови, що Object
і TypeError
мають свої первинні значення і що callbackfn.call
прирівнюється до первинного значення Function.prototype.call
if (!Array.prototype.every) {
Array.prototype.every = function(callbackfn, thisArg) {
'use strict';
var T, k;
if (this == null) {
throw new TypeError('this дорівнює null або не визначений');
}
// 1. Нехай O буде результатом виклику ToObject з передачею значення
// this в якості аргумента.
var O = Object(this);
// 2. Нехай lenValue буде результатом виклику внутрішнього метода O
// Get з аргументом "length".
// 3. Нехай len буде результатом ToUint32(lenValue).
var len = O.length >>> 0;
// 4. Якщо IsCallable(callbackfn) повертає false, викинути виняток TypeError.
if (typeof callbackfn !== 'function') {
throw new TypeError();
}
// 5. Якщо thisArg було передано, хай T буде thisArg; інакше хай T буде undefined.
if (arguments.length > 1) {
T = thisArg;
}
// 6. Нехай k дорівнює 0.
k = 0;
// 7. Повторювати, доки k < len
while (k < len) {
var kValue;
// а. Нехай Pk буде ToString(k).
// Це неявно для операндів LHS оператора in
// б. Нехай kPresent буде результатом виклику внутрішнього метода
// O HasProperty з аргументом Pk.
// Цей крок можна поєднати з в
// в. Якщо kPresent дорівнює true, тоді
if (k in O) {
// i. Нехай kValue буде результатом виклику внутрішнього метода
// O Get з аргументом Pk.
kValue = O[k];
// ii. Нехай testResult буде результатом виклику внутрішнього метода
// callbackfn Call з T в якості значення this і списком аргументів,
// який містить kValue, k, та O.
var testResult = callbackfn.call(T, kValue, k, O);
// iii. Якщо ToBoolean(testResult) дорівнює false, повернути false.
if (!testResult) {
return false;
}
}
k++;
}
return true;
};
}
Специфікації
Specification | Status | Comment |
---|---|---|
ECMAScript 5.1 (ECMA-262) The definition of 'Array.prototype.every' in that specification. |
Standard | Початкове визначення. Реалізовано у JavaScript 1.6. |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Array.prototype.every' in that specification. |
Standard | |
ECMAScript (ECMA-262) The definition of 'Array.prototype.every' in that specification. |
Living Standard |
Сумісність з веб-переглядачами
BCD tables only load in the browser