Estoy tratando de completar este ejercicio de codewars. Las instrucciones dicen: "Escriba una función que busque una matriz dentro de una matriz bidimensional y devuelva el índice del primer elemento coincidente. Si no hay ninguna coincidencia, su función debería devolver -1".
Ejemplos:
var arrayToSearch = [[1,2],[3,4],[5,6]]; var query = [1,2]; // => 0 query = [5,6]; // => 2 query = [9,2]; // => -1
Esta es mi solución, pero todavía falla.
var searchArray = function (arrayToSearch, query) { for(i = 0; i < arrayToSearch.length; i++) { for (j = 0; j < arrayToSearch[i]; j++) { if (arrayToSearch[i][j] === query) { return i; } } } return -1; }
No estoy seguro de lo que estoy haciendo mal, pero creo que el problema está en la declaración if, pero no sé qué es.
Cuestión de lógica.
Su segunda condición if j < arrayToSearch[i]
siempre devolverá falso, porque está comparando un número j
con una matriz arrayToSearch[i]
. En este caso el número j
se comparará con el primer elemento del arreglo arrayToSearch
, lo que hace que la función siempre devuelva -1.
Código corregido
var arrayToSearch = [[1, 2], [3, 4], [5, 6]]; var query = [1, 2]; // => 0 // query = [5, 6]; // => 2 // query = [9, 2]; // => -1 var searchArray = function (arrayToSearch, query) { for (i = 0; i < arrayToSearch.length; i++) { let isEqual = true; for (j = 0; j < arrayToSearch[i].length; j++) { isEqual = isEqual && (arrayToSearch[i][j] === query[j]) } if (isEqual) { return i; } } return -1; } console.log(searchArray(arrayToSearch, query));
este código simple funcionará.
var arrayToSearch = [[1,2],[3,4],[5,6]]; var query = [1,2]; var searchArray = function (arrayToSearch, query) { for (var i = 0; i < arrayToSearch.length; i++) { if (arrayToSearch[i][0] == query[0] && arrayToSearch[i][1] == query[1]) { return true; } } return -1; }
De una sola línea si no te importa:
const arrayToSearch = [[1,2],[3,4],[5,6]]; const query1 = [1,2]; const query2 = [3,4]; const query3 = [5,6]; const query4 = [9,2]; const searchArray = (arr, query) => arr.map(e => e.toString()).indexOf(query.toString()); console.log(`[${query1}]:`, searchArray(arrayToSearch, query1)); console.log(`[${query2}]:`, searchArray(arrayToSearch, query2)); console.log(`[${query3}]:`, searchArray(arrayToSearch, query3)); console.log(`[${query4}]:`, searchArray(arrayToSearch, query4));
.as-console-wrapper{min-height: 100%!important; top: 0}