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

时间:2014-10-14 17:44:39

标签: javascript arrays multidimensional-array

我有这个数组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元素的索引?

4 个答案:

答案 0 :(得分:1)

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

 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');

答案 1 :(得分:0)

您的代码中存在一些语法错误。除此之外,这将做:

 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;
  }

通过这种方式,您可以调用它来传递您想要查找的对象(作为您的&#39; H&#39;):

getIndexesOf(board, 'H');

请注意:

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

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

答案 2 :(得分:0)

首先,您错过了if语句和for循环的闭包,我认为这是一个复制/粘贴问题。

接下来,我认为您的getF函数不起作用,因为您将列返回为j,但该行始终为1.要解决此问题,请返回{{1}而不是。

最后,您可以使用相同的循环操作来获取所有'H',但只需将它们保存在一个数组中,当您找到它们时,使用类似于{ row: i, col: j }

的类似方法追加它们

答案 3 :(得分:0)

其他答案几乎是正确的:

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"));