Resumen
El método some()
verifica si algún elemento de un array cumple con el test implementado por la función brindada.
Sintaxis
arr.some(callback[, thisArg])
Parámetros
callback
- Función que verifica cada elemento, toma tres argumentos:
currentValue
- El elemento actual del array.
index
- El índice del elemento del array que se está procesando.
array
- El array sobre el que ha sido llamada la función
some()
.
thisArg
- Opcional. Valor a usar como
this
cuando se ejecutecallback
.
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. Sino, 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
. Sino, 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 primer 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
Ejemplo: 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
Ejemplo: Verificando los elementos de un array usando funciones flecha (arrow functions)
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
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
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: https://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) The definition of 'Array.prototype.some' in that specification. |
Standard | Definición inicial. Implementado en JavaScript 1.6. |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Array.prototype.some' in that specification. |
Standard |
Compatibilidad en navegadores
Característica | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Soporte básico | (Yes) | 1.5 (1.8) | 9 | (Yes) | (Yes) |
Característica | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Soporte básico | (Yes) | (Yes) | 1.0 (1.8) | (Yes) | (Yes) | (Yes) |