MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-survey

Переклад не закінчено. Будь ласка, допоможіть перекласти цю статтю з англійської.

 Метод 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[, thisArg])

Параметри

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

Вертає

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

Опис

Метод 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 дорівнює 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 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.
Draft  

Сумісність з браузерами

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

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)

Див. також

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

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