【问题标题】:Searching a 2D Javascript Array For Value Index在 2D Javascript 数组中搜索值索引
【发布时间】:2015-01-13 12:54:38
【问题描述】:

我正在尝试编写一个 jQuery,它将在 7x7 二维数组中找到特定值的索引。

因此,如果我要查找的值为 0,那么我需要该函数来搜索二维数组,一旦找到 0,它就会存储两个索引的索引。

这是我目前所拥有的,但它返回“0 0”(设置为变量的初始值。

这是一个 jsFiddle 和我目前拥有的功能:

http://jsfiddle.net/31pj8ydz/1/

$(document).ready( function() {

    var items = [[1,2,3,4,5,6,7], 
                 [1,2,3,4,5,6,7], 
                 [1,2,3,0,5,6,7], 
                 [1,2,3,4,5,6,7], 
                 [1,2,3,4,5,6,7], 
                 [1,2,3,4,5,6,7], 
                 [1,2,3,4,5,6,7]];

    var row = 0;
    var line = 0;

    for (i = 0; i < 7; ++i) {
        for (j = 0; i < 7; ++i) {
            if (items[i, j] == '0,') {
                row = i;
                line = j;
            }
        }
    }

    $('.text').text(row + ' ' + line);
});

HTML:

<p class="text"></p>

【问题讨论】:

  • javascript中的多维索引器是[][],即items[i][j]
  • 我认为正确的术语是行和列而不是行和行(行 == 行)
  • 您也没有在内部 for 循环中增加或检查 j
  • 更新了我的答案,提供了一些细节。

标签: javascript jquery arrays multidimensional-array


【解决方案1】:

您的if 语句正在比较

if (items[i, j] == '0,')

访问错误,请使用[i][j]

你的数组有值:

[1,2,3,4,5,6,7]
....

你的值'0,'是一个字符串,它不会匹配数组中的数值,这意味着你的行和行不会改变。

【讨论】:

    【解决方案2】:

    首先,您访问的数组有误。要访问二维数组,请使用 items[i][j] 格式。

    其次,您的数组不包含值'0'。它不包含任何字符串。所以rowline 变量永远不会改变。

    您应该将 if 语句更改为如下所示:

    if(items[i][j] == 0) {
    

    注意它搜索的是数字 0,而不是字符串 '0'。

    【讨论】:

    • 其实它包含值'0'
    • @andre 再看一遍,它确实包含数字 0,但它不包含字符串“0”,这是 OP 正在搜索的内容。我修正了我的答案。
    • 实际上,使用的比较运算符允许将字符串与整数进行比较,除非比较运算符是===
    【解决方案3】:

    您以错误的方式访问您的阵列。请试试这个:

    items[i][j]
    

    当我们有一个多维数组时,我们使用 array[firstDimensionIndex][secondDimensionIndex]...[nthDimensionIndex] 访问数组的元素。

    话虽如此,您应该更改 if 语句中的条件:

     if( items[i][j] === 0 )
    

    请注意,我已删除您在 0 之后的 ,。不需要它。我还删除了''。我们也不需要它们。

    【讨论】:

      【解决方案4】:

      代码中存在以下问题

      1) items[i,j] 应该是 items[i][j]

      2) 如果您不关心类型,您将它与'0,' 进行比较,它应该是0'0'

      3) 在您的内部for 循环中,您应该递增j 并测试j 作为退出条件。

      像下面这样更改您的 for 循环,它将起作用

      for (i = 0; i < 7; i++) {
              for (j = 0; j < 7; j++) {
                  if (items[i][j] == '0') {
                      row = i;
                      line = j;
                  }
              }
          }
      

      DEMO

      注意:-

      1) 最好在== 的位置使用===,它还会检查类型。正如你所看到的0=='0' 给出了真实的。

      2) 最好说i &lt; items.lengthj&lt;items[i].length 而不是硬编码为7。

      【讨论】:

      • 谢谢!!我尝试修复代码中的所有错误,但页面完全没有响应。是 ++i, ++j 到 i++, j++ 的变化解决了这个问题
      【解决方案5】:
      var foo;
      items.forEach(function(arr, i) {
          arr.forEach(function(val, j) {
              if (!val) { //0 coerces to false
                  foo = [i, j];
              }
          }
      }
      

      这里 foo 将是二维数组中 0 的最后一个实例。

      【讨论】:

        【解决方案6】:

        你做错了循环 在

        的地方
         for (i = 0; i < 7; ++i) {
                for (j = 0; i < 7; ++i) {
                    if (items[i, j] == '0,') {
                        row = i;
                        line = j;
                    }
                }
            }
        

        使用这个

         for (i = 0; i < 7; i++) {
                for (j = 0; j < 7; j++) {
                    if (items[i][j] == 0) {
                        row = i;
                        line = j;
                    }
                }
            }
        

        这里是demo

        【讨论】:

          【解决方案7】:

          看来您仍在学习如何编程。但这是我制作的算法。分析它并与您的代码进行比较;)

          var itens = [[1,2,3,4,5,6,7], 
                       [1,2,3,4,5,6,7], 
                       [1,2,3,0,5,6,7], 
                       [1,2,3,4,5,6,7], 
                       [1,2,3,4,5,6,7], 
                       [1,2,3,4,5,6,7], 
                       [1,2,3,4,5,6,7]];
          
          var row = null;
          var collumn = null;
          
          for (var i = 0; i < itens.length; i++) {
              for (var j = 0; j < itens[i].length; j++) {
                  if (itens[i][j] == 0) {
                      row = i;
                      collumn = j;
                  }
              }
          }
          
          console.log(row, collumn);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-03-11
            • 1970-01-01
            • 1970-01-01
            • 2020-02-01
            相关资源
            最近更新 更多