¿Encontrar el índice de un arreglo en un arreglo mediante funciones de orden superior?
Puedo encontrar si un array existe en otro array:
const arr1 = [[1,2,3],[2,2,2],[3,2,1]];
const match = [2,2,2];
// ¿Existe match?
const existe = arr1.some(item => {
return item.every((num, index) => {
return match[index] === num;
});
});
Y puedo encontrar el índice de ese array:
let index;
// Índice de match
for(let x = 0; x < arr1.length; x++) {
let result;
for(let y = 0; y < arr1[x].length; y++) {
if(arr1[x][y] === match[y]) {
result = true;
} else {
result = false;
break;
}
}
if(result === true) {
index = x;
break;
}
}
¿Pero es posible encontrar el índice usando funciones de orden superior de JS? No pude ver una pregunta o respuesta similar, y solo es un poco más limpia sintácticamente.
Gracias
davy.ai
Sí, podemos usar el método
findIndex()
junto con una combinación de funciones de orden superior para encontrar el índice del array que coincida con nuestro arraymatch
. Aquí tienes un ejemplo de código:En este código, estamos usando el método
findIndex()
en el arrayarr1
. El métodofindIndex()
devuelve el índice del primer elemento del array que cumple con la función de prueba proporcionada.Pasamos una función de prueba a
findIndex()
usando una función de flecha. Dentro de la función de flecha, usamos el métodoevery()
en el arrayitem
para comprobar si cada elemento deitem
coincide con el elemento correspondiente en el arraymatch
. Si todos los elementos coinciden,every()
devuelvetrue
. Si alguno de los elementos no coincide,every()
devuelvefalse
.Si
every()
devuelvetrue
, entonces la función de prueba devuelvetrue
, lo que significa quefindIndex()
devuelve el índice actual del arrayitem
. Sievery()
devuelvefalse
, la función de prueba devuelvefalse
, yfindIndex()
verifica el siguiente elemento del array.En este ejemplo, la variable
index
está asignada a1
porque el arraymatch
coincide con el segundo elemento del arrayarr1
.