Comprobar valores de un array
Más tarde o más temprano vas a necesitar programar para encontrar un valor en una lista de tipo array. Esta operación se puede hacer con un bucle for o un método de recorrido del array. Pero existen formas que facilitan la tarea de encontrar un elemento en un array:
- every(): verifica una condición para todos los elementos del array
- some(): verifica si algún elemento cumple una condición dada
- includes(): comprueba si un elemento está en el array
- find(): dice cual es el primer elemento que cumple una condición dada
- findLast(): Nos da el último valor que cumple la condición dada
Son métodos usados para buscar si un valor determinado se encuentra en un array o si hay un valor que cumpla con una condición dada.
Los dos primeros métodos usan una función de llamada (las callback function en inglés). Este tipo de funciones puede recibir hasta tres argumentos, por orden: valor del elemento testeado, indice del mismo y el array completo. Y también como es habitual con estas funciones, el método puede usar un segundo argumento que será la variable this en el cuerpo de la función. Útil si se necesita otra variable para la comprobación
Así every() determina si todos los elementos de un array cumplen una condición, condición que se da mediante una función de llamada.
El resultado devuelto es true si todos lo cumplen (o el array está vacío) o false si al menos un elemento no cumple con la condición
var datos =[4,6,8,10,12];
var espar = function(x){ return x%2==0};
var testPar = datos.every(espar);
console.log("¿Datos son pares? "+testPar);
En este ejemplo el resultado dice que todos son pares.
El método some() por su parte comprueba si al menos uno de los elementos cumple con la condición pasada por la función callback. Basta con que la función devuelva true para un elemento para que el resultado sea true.
var datos=[ 1,1,1,1,0,1];
var hayCeros;
hayCeros = datos.some(function(v){return v==0});
console.log("¿Algún cero? "+hayCeros)
En este sencillo ejemplo se comprueba si al menos un elemento es 0. Solo comprueba, no indica cual es el elemento que cumple la condición
Estos métodos podrían también usar para averiguar si un array contiene o no un valor determinado, pero el método includes() facilita esta tarea. Se trata de un método que recorre el array y devuelve true si encuentra algún elemento que sea igual al valor que se le pasa como argumento. Si no lo encuentra devuelve false, pero no indica nada más.
Puede usar un segundo argumento para indicar que busca desde un indice hasta el final, si no se indica nada busca desde el principio.
var colores = ["rojo","verde", "azul", "negro"];
var miColor;
miColor = colores.includes("amarillo");
console.log("Color amarillo en la lista: "+miColor);
Se pueden buscar el primer valor del array usando el método find(), este método usa como argumento una función (callback funciton) que devolverá true o false.
Si la función de llamada devuelve true para un elemento del array, el método devuelve el valor correspondiente, en caso contrario devuelve undefined. Solo devuelve el primer valor que encuentra y no sigue buscando. .
var datos=[34,56,12,90,20,35,40];
var multiplo10;
var valor = datos.find(function(v){return v%10==0});
console.log("primer multiplo de 10 es el "+valor) //90
Con una pequeña modificación podríamos saber también el índice. Es un ejemplo de uso del argumento opcional que se usa como objeto this dentro de la función
var datos=[34,56,12,90,20,35,40];
var multiplo10, indice={idx:0}
var valor = datos.find(function(v,i ){
this.idx = i;
return v%10==0}, indice);
console.log("Primer multiplo de 10 es el "+valor+ ", posición "+indice.idx);
Este último es solo un ejemplo de uso del argumento this, un objeto opcional para usar dentro de la función callback. Existen métodos para encontrar índices con menos código.
Este último método tiene una versión que comienza a recorrer el arrya desde el final con lo que nos da´el últomo valor que cunmpla la condición de la callback function: findLast()
var datos=[34,56,12,90,20,35,40];
var multiplo10;
var valor = datos.findLast((v)=> v%10==0);
console.log("último multiplo de 10 es el "+valor) //40
En esta ocasión el callback lo definimos co una arrow function, por ver otra forma de usar las callback function.