Array.some() y Array.every()

December 15, 2021 (3y ago)

Array.some() y Array.every() fueron introducidos en ECMAScript 5 en el 2009 (sí 😱) y parece que hasta hoy están saliendo a la luz, así que vamos a examinarlos más de cerca.

The Array.some() method

Array.some() devuelve true si al menos un elemento del array coincide con algún criterio que especifiques como parte de una función callback.

[-10, 0, 10].some((x) => x < 0); // true
[1, 2, 3, 4].some((x) => x < 0); // false

Algo que notar es que some() deja de iterar sobre el array en cuanto encuentra un elemento que coincide con el criterio especificado. Solo en el caso de no encontrar ningún elemento que coincida se puede decir que ha recorrido todo el array.

The Array.every() method

Array.every() devuelve true si todos los elementos del array coinciden con algún criterio que especifiques como parte de una función de devolución de llamada.

[1, 2, 3, 4].every((x) => x < 0); // false
[1, 2, 3, 4].every((x) => x >= 0); // true

Al igual que en el caso de some(), la ejecución de every() termina en cuanto every() encuentra un elemento del array que no coincide con el criterio especificado, devuelve inmediatamente false y no itera sobre los elementos restantes.

Parametros para el callback

Tanto en some() como en every()la función callback recibe 3 argumentos: el elemento actual del array a probar, el índice y el propio array. Puedes evaluar esos parámetros como desees para determinar si devuelve true o false:

function callback(element, index, array) {
  // ...
}

¿Cuándo usar Array.filter() sobre Array.some() o Array.every()?

Cuando quieres ver si algunos elementos cumplen algún criterio y luego hacer algo con ellos. Por ejemplo:

const fruits = ['apples', 'oranges', 'pears', 'apples', 'bananas'];
 
// Obtener un array solo con las manzanas
const apples = fruits.filter((fruit) => fruit === 'apples');
 
// Si hay manzanas entonces las cuento
if (apples.length > 0) {
  alert(`You have ${apples.length} apples!`);
}