繁体   English   中英

如何使用JavaScript在多维数组中查找特定元素的行和列

[英]How to find the row and column of a specific element in a multidimensional array using javascript

我有这个8x8数组,应该代表一个棋盘。

 var board = [['RS', 'H',  'RS', 'H',  'RS', 'H',  'RS', 'H'],
          ['BS', 'RS', 'BS', 'RS', 'BS', 'RS', 'BS', 'RS'],
          ['RS', 'BS', 'RS', 'BS', 'RS', 'BS', 'RS', 'BS'],
          ['BS', 'RS', 'BS', 'RS', 'BS', 'RS', 'BS', 'RS'],
          ['RS', 'BS', 'RS', 'BS', 'RS', 'BS', 'RS', 'BS'],
          ['BS', 'RS', 'BS', 'RS', 'BS', 'RS', 'BS', 'RS'],
          ['RS', 'BS', 'RS', 'BS', 'RS', 'BS', 'RS', 'BS'],
          ['F', ' RS', 'BS', 'RS', 'BS', 'RS', 'BS', 'RS']
 ];

我想获取元素F的行和列号,我正在尝试使用4循环

 function getF(board) {
    var i, j;
    for (i = 0; i < 8; i++) {
      for (j = 0; j < 8; j++) {
        if(board[i][j] == 'F'{

     return {row:1, col:j};

我该如何获取所有H元素的索引?

您可以简化您的功能,例如:

 function getCharIndexes(board, char) {
    var i, j, collection = [];
    for (i = 0; i < board.length; i++) {
      for (j = 0; j < board[i].length; j++) {
        if(board[i][j] == char) {
            collection.push({row:1, col:j}); // should be {row: i, col: j}
        }
      }
    }
    return collection;
  }

要获取“ F”调用,请执行以下操作: getCharIndexes(board, 'F');

要获取“ H”调用: getCharIndexes(board, 'H');

等等

您的代码中有一些语法错误。 除此之外,这还可以:

 function getIndexesOf(matrix, obj) {
    var i, j;
    var ret = []
    for (i = 0; i < matrix.length; i++) {
      var line = matrix[i];
      for (j = 0; j < line.length; j++) {
        if(board[i][j] == obj) {
          ret.push({row: i, col: j})
        }
      }
    }
    return ret;
  }

这样,您可以通过传递要查找的对象(称为“ H”)来调用它:

getIndexesOf(board, 'H');

注意:

  1. 您在for循环中使用文字值。 最好使用矩阵的长度和所传递的线的长度。

  2. 在您的示例中,您将返回{row:1, col:j} 这是不正确的,即使在示例中也不符合您的目的。 在这种情况下,您将返回{row:i, col:j} ,因为i持有行号,而返回固定的行号1则没有意义。

首先,您缺少if语句和for循环的闭包,我认为这是复制/粘贴问题。

接下来,我认为您的getF函数不起作用,因为您将列返回为j ,但是行始终为1。要解决此问题,只需返回{ row: i, col: j }

最后,您可以使用相同的循环操作来获取所有的'H',但只需将它们保存在数组中,并在找到它们时,使用类似于以下内容的方法将它们附加: foo.push({ row: i, col: j });

其他答案几乎是正确的:

var board = [['RS', 'H',  'RS', 'H',  'RS', 'H',  'RS', 'H'],
    ['BS', 'RS', 'BS', 'RS', 'BS', 'RS', 'BS', 'RS'],
    ['RS', 'BS', 'RS', 'BS', 'RS', 'BS', 'RS', 'BS'],
    ['BS', 'RS', 'BS', 'RS', 'BS', 'RS', 'BS', 'RS'],
    ['RS', 'BS', 'RS', 'BS', 'RS', 'BS', 'RS', 'BS'],
    ['BS', 'RS', 'BS', 'RS', 'BS', 'RS', 'BS', 'RS'],
    ['RS', 'BS', 'RS', 'BS', 'RS', 'BS', 'RS', 'BS'],
    ['F', ' RS', 'BS', 'RS', 'BS', 'RS', 'BS', 'RS']];

function getChar(board, c) {
    var i, j, collection = [];
    for (i = 0; i < board.length; i++) {
      for (j = 0; j < board[i].length; j++) {
        if(board[i][j] == c)
            collection.push({row:i, col:j});
      }
    }
    return collection;
}

console.log(getChar(board, "F"));
console.log(getChar(board, "H"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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