En esta tercera parte vamos a ver varios métodos juntos, find, filter y some porque...bueno, porque sí.
En realidad porque tiene algo en común, todos reciben como parámetro un predicado
¿Y qué es un predicado?
En este contexto es una función que establece una condición contra la cual se evaluarán elementos.
Dicho en palabras un poco menos complicadas, pasamos una función que será la encargada de decirnos si un elemento de un array cumple con una condición.
Veamos un ejemplo:
Array.filter
Empecemos con filter, al final los tres métodos son similares pero hacen cosas distintas.
Filter permite tomar solo aquellos elementos de un array que cumplen con una condición, en este caso, determinada por el predicado.
Entonces, si tenemos el siguiente array:
var a = [1,2,3,4,5,6,7,8,9];
y quisiera quedarme solo con aquellos elementos que son pares podría hacer esto:
var aa = [];
for(var item in a){
if(item % 2 == 0)
aa.push(item);
}
console.log(aa);
Con filter la cosa sería así:
aa = a.filter(function(item){
return item % 2 == 0; });
El resultado es exactamente el mismo.
Y es igual que:
aa = a.filter((item)=> item % 2 == 0);
Aún más elegante.
Algunas características de filter:
- Solo se invoca el callback (el predicado) para elementos que tiene valores, es decir, los elementos del array sin valores se ignoran.
- Los elementos borrados durante la ejecución no son visitados.
- El rango de elementos a visitar se establece antes del inicio de la iteración, es decir, si se agregan elementos los mismo no son visitados.
- Si un elemento cambia de valor se leerá el nuevo valor.
Además filter recibe dos parámentros, el callback que recibe tres: el elemento actual, el índice actual y el array original.
El segundo parámetro es el contexto de this, vamos, igual que las funciones que vimos en los posts anteriores.
Todo es es igual para el caso de find y some, veamos cómo funcionan.
Find
Simplemente retorna el primer elemento que coincida con el criterio del predicado, en el ejemplo anterior retornaría el número 2.
a.find((item)=> item % 2 == 0);
Evidentemente si hay más elementos que cumplen la condición establecida en el predicado son ignorados, en caso de no haber ninguno retorna undefined.
a.find((item) => item > 10);
Las mismas reglas de comportamiento anteriores se aplican a find.
Some
En este caso devuelve true si al menos un elemento cumple con el criterio de búsqueda y false si no hay ninguno.
a.some((item) => item > 2);
Devolverá true.
a.some((item)=> item > 10);
Devolverá false, sería casi como hacer algo así con find:
a.find((item)=>item > 10) != undefined;
Lo dejamos acá por hoy, nos leemos.