Метод 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

Syntax

arr.every(callback[, thisArg])

Parameters

callback
Функція, яка перевіряє кожен елемент масиву. Повертає true якщо елемент відповідає умові та false, якщо ні. Приймає три аргументи:
currentValue (required)
Поточний елемент, який обробляється в масиві.
index (optional)
Індекс поточного елемента, який обробляється в масиві.
array (optional)
Масив для якого був викликаний метод every.
thisArg
Необов'язковий. Значення, яке використовується як this коли виконується callback.

Return value

true якщо callback функція повернула truthy для кожного елементу масиву; в іншому випадку, false.

Description

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

Функція callback викликається з трьома аргументами: значення елементу, індекс елементу в масиві і масив по якому робиться перебір.

Якщо параметр thisArg переданий в every, то він буде використовуватися функцією callback як значення this, коли та буде викликана. В іншому випадку буде передано значення undefined як її значення this. Значення this зрештою видиме для функції callback і визначається відповідно до звичайних правил для визначення this яке видиме функцією.

Метод every не змінює масиву у якого він був викликаний.

Діапазон елементів, які обробляються методом every() встановлюється перед першим виконанням функції callback. Елементи, які додаються в масив після того, як метод every()був викликаний, не будуть обходитися функцією callback. Якщо існуючі елементи масиву змінилися, то їхні значення, які передаються в функцію callback будуть значеннями на момент обходу їх методом every(); якщо існуючі елементи масиву видалили, то метод every() обходити їх не буде.

every схожий за дією на математичний символ "для кожного \forall \!\,".  Зокрема для порожнього масиву він повертає 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

Викристання стрілкових функцій

Arrow functions довзоляють коротше записати приклад, наведений вище.

[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 is null or not defined');
    }

    // 1. Let O be the result of calling ToObject passing the this 
    //    value as the argument.
    var O = Object(this);

    // 2. Let lenValue be the result of calling the Get internal method
    //    of O with the argument "length".
    // 3. Let len be ToUint32(lenValue).
    var len = O.length >>> 0;

    // 4. If IsCallable(callbackfn) is false, throw a TypeError exception.
    if (typeof callbackfn !== 'function') {
      throw new TypeError();
    }

    // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
    if (arguments.length > 1) {
      T = thisArg;
    }

    // 6. Let k be 0.
    k = 0;

    // 7. Repeat, while k < len
    while (k < len) {

      var kValue;

      // a. Let Pk be ToString(k).
      //   This is implicit for LHS operands of the in operator
      // b. Let kPresent be the result of calling the HasProperty internal 
      //    method of O with argument Pk.
      //   This step can be combined with c
      // c. If kPresent is true, then
      if (k in O) {

        // i. Let kValue be the result of calling the Get internal method
        //    of O with argument Pk.
        kValue = O[k];

        // ii. Let testResult be the result of calling the Call internal method
        //     of callbackfn with T as the this value and argument list 
        //     containing kValue, k, and O.
        var testResult = callbackfn.call(T, kValue, k, O);

        // iii. If ToBoolean(testResult) is false, return false.
        if (!testResult) {
          return false;
        }
      }
      k++;
    }
    return true;
  };
}

Specifications

Specification Status Comment
ECMAScript 5.1 (ECMA-262)
The definition of 'Array.prototype.every' in that specification.
Standard Initial definition. Implemented in JavaScript 1.6.
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.every' in that specification.
Standard  
ECMAScript Latest Draft (ECMA-262)
The definition of 'Array.prototype.every' in that specification.
Living Standard  

Browser compatibility

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) 1.5 (1.8) 9 (Yes) (Yes)
Feature Android Chrome for Android Edge Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) 1.0 (1.8) (Yes) (Yes) (Yes)

See also

Мітки документа й учасники

 Зробили внесок у цю сторінку: DariaManko, znata
 Востаннє оновлена: DariaManko,