'CodeWars Javascript challenge: IndexOf Array in Array
I'm trying to complete this exercise from codewars. The instructions say: " Write a function that looks for an array within a two-dimensional array and returns the index of the first matching element. If there is no match, your function should return -1"
Exemples:
var arrayToSearch = [[1,2],[3,4],[5,6]];
var query = [1,2]; // => 0
query = [5,6]; // => 2
query = [9,2]; // => -1
This is my solution, but it still fails.
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;
}
I'm not sure what I'm doing wrong, but I think the problem is in the if statement, but I don't know what it is.
Solution 1:[1]
Issue in logic.
Your second if condition j < arrayToSearch[i] will always returns false, because you are comparing a number j against an array arrayToSearch[i]. In this case the number j will be compared agaist the first elementin the array arrayToSearch, which makes the function always returns -1.
Corrected Code
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));
Solution 2:[2]
this simple code will work.
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;
}
Solution 3:[3]
One-liner if you don't mind:
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}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | saravanan049 |
| Solution 3 | A1exandr Belan |
