Array.prototype.every()

El m猫tode every() comprova si tots els elements d'un array passen el test implementat per la funci贸 proporcionada.

Sintaxi

arr.every(callback[, thisArg])

Par脿metres

callback
Funci贸 utilitzada com a test per a cada element, rep tres arguments:
valorActual
L'element de l'array que est脿 sent avaluat.
posici贸
La posici贸 que l'element passat al primer par脿metre ocupa dins l'array.
array
L'array des del que s'ha cridat el m猫tode every().
thisArg
Opcional. Valor que valdr脿 la variable this quan s'estigui executant la funci贸 callback.

Descripci贸

every() executa la funci贸 callback un cop per a cada element present a l'array fins que troba un per al qual callback retorna un valor falsy (茅s a dir, un valor que esdeb茅 fals si es realitza una conversi贸 de tipus a Boolean). Si es troba aquest element, el m猫tode every retorna immediatament false. En cas contrari, si callback ha retornat un valor true per a tots els elements, every retornar脿 true. Nom茅s s'invocar脿 la funci贸 callback en les posicions de l'array que tinguin un valor assignat, 茅s a dir, mai es cridar脿 per a posicions que han estat esborrades o el valor de les quals no ha estat mai assignat.

S'invoca callback amb tres arguments: el valor de l'element, la posici贸 de l'element dins l'array, i l'objecte array que es recorrer脿.

Si es proporciona el par脿metre thisArg al m猫tode every(), aquest es passar脿 a callback quan s'invoqui, i ser脿 el valor que mostrar脿 la variable this. En cas contrari, s'utilitzar脿 el valor undefined com a valor per a this. El valor de this observable en 煤ltima inst脿ncia per callback es determinar脿 d'acord a les regles per a determinar el valor de this observat per una funci贸.

every() no mutar脿 l'array quan sigui cridada.

El rang d'elements processat per every() 茅s determinat abans de la primera invocaci贸 de callback. Els elements que s'afegeixin a l'array despr茅s de la crida a every() no seran visitats per callback. Si el valor d'un element encara no visitat canvia, el valor que es passar脿 a callback ser脿 el valor que tingui aquest element a l'hora de visitar-lo; els elements que s'esborrin no es visitaran.

every es comporta com un quantificador "for all" en matem脿tiques. En concret, per a un array buit retornar脿 true (s'anomena veritat per buit el fet que tots els elements d'un grup buit satisfacin qualsevol condici贸 donada).

Exemples

Comprovar el tamany de tots els elements d'un array

L'exemple seg眉ent comprova si tots els elements d'un array son majors de 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

Utilitzar funcions flexta

Les funcions fletxa ofereixen una sintaxi redu茂da per a realitzar el mateix test.

[12, 5, 8, 130, 44].every(elem => elem >= 10); // false
[12, 54, 18, 130, 44].every(elem => elem >= 10); // true

Polyfill

every va ser afegida  al standard ECMA-262 en la cinquena edici贸; 茅s per aix貌 que pot no estar disponible en certes implementacions del standard. Es pot proporcionar la seva funcionalitat inserint l'script seg眉ent a l'inici dels vostres scripts, permetent l'煤s de every() en implementacions que no la suporten de forma nativa. Aquest algoritme 茅s exactament l'especificat a l'ECMA-262, cinquena edici贸, assumint que Object i TypeError tenen els valors originals i que callbackfn.call es correspon amb el valor original de Function.prototype.call (en-US).

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;
  };
}

Especificacions

Especificaic贸 Estat Comentaris
ECMAScript 5.1 (ECMA-262)
The definition of 'Array.prototype.every' in that specification.
Standard Definici贸 inicial. Implemnetat a 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  

Compatibilitat amb navegadors

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! (en-US)
Caracter铆stica Chrome Firefox (Gecko) Internet Explorer Opera Safari
Suport b脿sic (Yes) 1.5 (1.8) 9 (Yes) (Yes)
Caracter铆stica Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Suport b脿sic (Yes) (Yes) 1.0 (1.8) (Yes) (Yes) (Yes)

Vegeu tamb茅