es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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

Tags:  , ,

Answer

  1. Avatar for 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 array match. Aquí tienes un ejemplo de código:

    const arr1 = [[1,2,3],[2,2,2],[3,2,1]];
    const match = [2,2,2];
    
    const index = arr1.findIndex(item => item.every((num, index) => num === match[index]));
    
    console.log(index); // Resultado: 1
    

    En este código, estamos usando el método findIndex() en el array arr1. El método findIndex() 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étodo every() en el array item para comprobar si cada elemento de item coincide con el elemento correspondiente en el array match. Si todos los elementos coinciden, every() devuelve true. Si alguno de los elementos no coincide, every() devuelve false.

    Si every() devuelve true, entonces la función de prueba devuelve true, lo que significa que findIndex() devuelve el índice actual del array item. Si every() devuelve false, la función de prueba devuelve false, y findIndex() verifica el siguiente elemento del array.

    En este ejemplo, la variable index está asignada a 1 porque el array match coincide con el segundo elemento del array arr1.

Comments are closed.