简体   繁体   English

CodeWars Javascript 挑战:数组中的数组索引

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM