Array.prototype.every()

Determina si todos los elementos en el array satisfacen una condici贸n.

Precauci贸n: 隆Llamar este m茅todo en un array vac铆o devuelve true para cualquier condici贸n!

Sintaxis

arr.every(callback(element[, index[, array]])[, thisArg])

Par谩metros

callback
Una funci贸n para probar cada elemento; recibe tres argumentos:
currentValue (required)
El elemento actual del arreglo que est谩 siendo procesado.
index Optional
El 铆ndice del elemento actual del arreglo que est谩 siendo procesado.
array Optional
El arreglo sobre el cual fue llamado every.
thisArg Optional
Valor por usar como this cuando se ejecute callback.

Valor de retorno

true si la funci贸n de devoluci贸n de llamada devuelve un valor de truthy para cada elemento de matriz; de lo contrario, false.

Descripci贸n

El m茅todo every ejecuta la funci贸n callback dada una vez por cada elemento presente en el arreglo hasta encontrar uno que haga retornar un valor falso a callback (un valor que resulte falso cuando se convierta a booleano).  Si no se encuentra tal elemento, el m茅todo every de inmediato retorna  false. O si  callback retorna verdadero para todos los elementos, every retornar谩 true. callback es llamada s贸lo para 铆ndices del arreglo que tengan valores asignados; no se llama para 铆ndices que hayan sido eliminados o a los que no se les haya asignado un valor.

callback es llamada con tres argumetos: el valor del elemento, el 铆ndice del elemento y el objeto Array que est谩 siendo recorrido.

Si se proporciona un par谩metro thisArg a every, ser谩 pasado a la funci贸n callback cuando sea llamada, us谩ndolo como valor this. En otro caso, se pasar谩 el valor undefined para que sea usado como valor this.  El valor this observable por parte de  callback se determina de acuerdo a las normas usuales para determinar el this visto por una funci贸n.

every no modifica el arreglo sobre el cual es llamado.

El intervalo de elementos procesados por every se establece antes de la primera llamada a callback.  Los elementos que se agreguen al arreglo despu茅s de que la funci贸n every comience no ser谩n vistos por la funci贸n callback.  Si se modifican elementos existentes en el arreglo, su valor cuando sea pasado a callback ser谩 el valor que tengan cuando sean visitados; los elementos que se eliminen no ser谩n visitados.

every opera como el cuantificador "para todo" en matem谩ticas. En particular con el arreglo vac铆o retorna true. (es una verdad vacua que todos los elementos del conjunto vac铆o satisfacen una condici贸n dada.)

Ejemplos

Probando el tama帽o de todos los elementos de un arreglo

El siguiente ejemplo prueba si todos los elementos de un arreglo son mayores que 10.

function esSuficientementeGrande(elemento, indice, arrreglo) {
  return elemento >= 10;
}
[12, 5, 8, 130, 44].every(esSuficientementeGrande);   // false
[12, 54, 18, 130, 44].every(esSuficientementeGrande); // true

Usar funciones flecha

Las funciones flecha proveen una sintaxis m谩s corta para la misma prueba.

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

Polyfill

every fue a帽adida a la norma ECMA-262 en la 5ta edici贸n; por lo que podr铆a no estar presente en otras implementaciones de la norma.  Puede sobrellevarlo insertando el siguiente c贸digo al comienzo de su programa,  permitiendo el uso de every  en implementaci贸n que no lo soporten de manera nativa. Este algoritmo es exactamente el especificado en ECMA-262, 5ta edici贸n, suponiendo que  Object y TypeError tienen sus valores originales y que  callbackfn.call evalua al valor original de 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;
  };
}

Especificaciones

Especificaci贸n Estado Comentario
ECMAScript 5.1 (ECMA-262)
La definici贸n de 'Array.prototype.every' en esta especificaci贸n.
Standard Initial definition. Implemented in JavaScript 1.6.
ECMAScript 2015 (6th Edition, ECMA-262)
La definici贸n de 'Array.prototype.every' en esta especificaci贸n.
Standard
ECMAScript (ECMA-262)
La definici贸n de 'Array.prototype.every' en esta especificaci贸n.
Living Standard

Compatibilidad con navegadores

BCD tables only load in the browser

Ver tambi茅n