[英]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"
说明说:“写一个 function,它在二维数组中查找数组并返回第一个匹配元素的索引。如果没有匹配,你的 function 应该返回 -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.我不确定我做错了什么,但我认为问题出在 if 语句中,但我不知道它是什么。
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]
.您的第二个 if 条件
j < arrayToSearch[i]
将始终返回 false,因为您正在将数字j
与数组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.在这种情况下,数字
j
将与数组arrayToSearch
中的第一个元素进行比较,这使得 function 始终返回 -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));
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; }
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}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.