Array.prototype.some()

El m茅todo some() comprueba si al menos un elemento del array cumple con la condici贸n implementada por la funci贸n proporcionada.

Nota: Este m茅todo devuelve false para cualquier condici贸n puesta en un array vac铆o.

Sintaxis

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

Par谩metros

callback
Funci贸n que verifica cada elemento, toma tres argumentos:
element
El elemento actual siendo procesado en el array.
index Optional
El 铆ndice del elemento del array que se est谩 procesando.
array Optional
El array sobre el que ha sido llamada la funci贸n some().
thisArg Optional
Valor a usar como this cuando se ejecute callback.

Valor devuelto

true si la funci贸n callback devuelve un valor truthy para cualquier elemento del array; en caso contrario, false.

Descripci贸n

some() ejecuta la funci贸n callback una vez por cada elemento presente en el array hasta que encuentre uno donde callback retorna un valor verdadero (true). Si se encuentra dicho elemento, some() retorna true inmediatamente. Si no, some() retorna false. callback es invocada s贸lo para los 铆ndices del array que tienen valores asignados; no es invocada para 铆ndices que han sido borrados o a los que nunca se les han asignado valores.

callback es invocada con tres argumentos: el valor del elemento, el 铆ndice del elemento, y el objeto array sobre el que se itera.

Si se indica un par谩metro thisArg a some(), se pasar谩 a callback cuando es invocada, para usar como valor this. Si no, el valor undefined ser谩 pasado para usar como valor this. El valor this value observable por callback se determina de acuerdo a las reglas habituales para determinar el this visible por una funci贸n.

some() no modifica el array con el cual fue llamada.

El rango de elementos procesados por some() es configurado antes de la primera invocaci贸n de callback. Los elementos anexados al array luego de que comience la llamada a some() no ser谩n visitados por callback. Si un elemento existente y no visitado del array es alterado por callback, su valor pasado al callback ser谩 el valor al momento que some() visita el 铆ndice del elemento; los elementos borrados no son visitados.

Ejemplos

Verificando el valor de los elementos de un array

El siguiente ejemplo verifica si alg煤n elemento del array es mayor a 10.

function isBiggerThan10(element, index, array) {
  return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10);  // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true

Verificando los elementos de un array usando funciones flecha

Las funciones flecha (Arrow functions) brindan una sint谩xis m谩s corta para el mismo test.

[2, 5, 8, 1, 4].some(elem => elem > 10);  // false
[12, 5, 8, 1, 4].some(elem => elem > 10); // true

Comprobando si un elemento existe en un array

Para imitar la funci贸n del m茅todo includes(), esta funci贸n personalizada devuelve true si el elemento existe en el array:

var fruits = ['apple', 'banana', 'mango', 'guava'];

function checkAvailability(arr, val) {
  return arr.some(function(arrVal) {
    return val === arrVal;
  });
}

checkAvailability(fruits, 'kela');   // false
checkAvailability(fruits, 'banana'); // true

Comprobando si un elemento existe en un array con funciones flecha

var fruits = ['apple', 'banana', 'mango', 'guava'];

function checkAvailability(arr, val) {
  return arr.some(arrVal => val === arrVal);
}

checkAvailability(fruits, 'kela');   // false
checkAvailability(fruits, 'banana'); // true

Convirtiendo cualquier valor a Boolean

var TRUTHY_VALUES = [true, 'true', 1];

function getBoolean(value) {
  'use strict';

  if (typeof value === 'string') {
    value = value.toLowerCase().trim();
  }

  return TRUTHY_VALUES.some(function(t) {
    return t === value;
  });
}

getBoolean(false);   // false
getBoolean('false'); // false
getBoolean(1);       // true
getBoolean('true');  // true

Polyfill

some() fue agregado al est谩ndar ECMA-262 en la 5ta edici贸n; por ello, puede no estar presente en todas las implementaciones del est谩ndar. Puedes trabajar sobre esto insertando el siguiente c贸digo al comienzo de tus scripts, permitiendo el uso de some() en implementaciones que no tienen soporte nativo. Este algoritmo es exactamente el mismo especificado en ECMA-262, 5ta edici贸n, asumiendo que Object y TypeError (en-US) tienen sus valores originales y que fun.call eval煤a el valor original deFunction.prototype.call().

// Pasos de producci贸n de ECMA-262, Edici贸n 5, 15.4.4.17
// Referencia: http://es5.github.io/#x15.4.4.17
if (!Array.prototype.some) {
  Array.prototype.some = function(fun/*, thisArg*/) {
    'use strict';

    if (this == null) {
      throw new TypeError('Array.prototype.some called on null or undefined');
    }

    if (typeof fun !== 'function') {
      throw new TypeError();
    }

    var t = Object(this);
    var len = t.length >>> 0;

    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
    for (var i = 0; i < len; i++) {
      if (i in t && fun.call(thisArg, t[i], i, t)) {
        return true;
      }
    }

    return false;
  };
}

Especificaciones

Especificaci贸n Estado Comentario
ECMAScript 5.1 (ECMA-262)
La definici贸n de 'Array.prototype.some' en esta especificaci贸n.
Standard Definici贸n inicial. Implementado en JavaScript 1.6.
ECMAScript 2015 (6th Edition, ECMA-262)
La definici贸n de 'Array.prototype.some' en esta especificaci贸n.
Standard  
ECMAScript (ECMA-262)
La definici贸n de 'Array.prototype.some' en esta especificaci贸n.
Living Standard  

Compatibilidad en navegadores

BCD tables only load in the browser

Ver tambi茅n