Estoy tratando de encontrar el índice de una matriz dentro de otra matriz en Javascript, como se muestra a continuación:
const piece = [5, 10]; const array = [[5, 10], [5, 11]]; //Using indexOf console.log(array.indexOf(piece)); //Using findIndex console.log(array.findIndex(function(element) { return element == piece; })); Espero que estos devuelvan un 0, ya que ese es el índice donde mi "pieza" está dentro de la matriz más grande, pero ambos métodos devuelven -1
¿Alguna idea de por qué sucede esto? ¿Y si hay una manera diferente para mí de hacer esto?
Gracias.
Para comparar los valores reales, puede usar el método JSON.stringify() :
piece = [5, 10]; array = [[5, 10], [5, 11]]; //Using findIndex console.log(array.findIndex(function(element) { return JSON.stringify(element) == JSON.stringify(piece); }));Está comparando objetos (matrices) que se crearon cada uno por su cuenta, por lo que no son los mismos objetos. Si lo desea, puede comparar cada uno de los enteros dentro de las matrices, y cuando también coincidan las longitudes de las matrices, puede concluir que son "iguales":
piece = [5, 10]; array = [[5, 10], [5, 11]]; //Using findIndex console.log(array.findIndex(function(element) { return element.length === array.length && element.every((val, i) => val == piece[i]); }));Las matrices en JavaScript no se comparan por valor, sino por referencia. Entonces, si tiene matrices a y b como esta:
const a = [1, 2]; const b = [1, 2]; Cuando los compara usando ==, o === entonces se comparan sus referencias, no valores. Entonces este console.log(a == b) , o console.log(a === b) imprimirá falso.