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 ejecutecallback
.
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
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