使用索引查找矩阵中的位置

时间:2015-04-24 22:17:51

标签: javascript

我的头衔可能很糟糕,但我可以在这里解释我想要的东西。首先,我正在挑战自己的一些非常具体的事情。即使你猜到我想要完成的事情,请把你的答案放在我在这里问的主题上,而不是我要解决的整体问题。

我有一串25个生成的字母。 我通过str.indexOf(c)得到了一封信的索引,并且让我们说索引是16。 可视化str是5x5表的线性表示,因此索引16将是该表的第4行第2列。

我试图找到一种方法来使用javascript找到行和列,而不像这样循环:

var row = 1;
var index = str.indexOf(c) + 1;
while(index > 5) {
    index = index - 5;
    row++;
}

使用上面的代码,如果index从16开始,我的最终结果将是第4行,索引2 - 这就是我想要的。只是感觉应该有一种方法来使用算法而不是循环。

有什么想法吗?

5 个答案:

答案 0 :(得分:1)

您正在复制此代码示例中的除法和模数,您可以通过执行row = Math.floor(index / 5)col = index % 5来实现相同的目标。

var index = parseInt(prompt('Numeric Index'));
var row = Math.floor(index / 5) + 1;
var col = index % 5;

alert('[ ' + col + ', ' + row + ' ]'); 

答案 1 :(得分:0)

为什么不使用数学?

var index = 16;
var columnsPerRow = 5;
row = parseInt(index / columnsPerRow) + 1;
column = index % columnsPerRow + 1;

答案 2 :(得分:0)

您可以只创建一个函数

,而不是使用循环
function findPosition(index, cols) {
  var rowIndex = parseInt(index/cols) + 1;
  var colIndex = index % cols;

  return {rowIndex: rowIndex, colIndex: colIndex}
}

所以在你的情况下,字符串索引是17,你的矩阵col是5 你将调用findPosition(17,5),它将返回{rowIndex:4,colIndex:2}

答案 3 :(得分:0)

试试这个,你可以使用余数(或模数)来找到列和整数来找到行。

function getPosition(str, character, gridWidth) {
  var index = str.indexOf(character);
  var row = Math.floor(index/gridWidth);
  var col = index%gridWidth;
  return {row:row, col:col};
}

然后像这样使用它

var str = "hello sir";
console.log(getPosition(str, "i", 3));

答案 4 :(得分:0)

你可以计算位置,这个解决方案取决于Matrix从0开始,0不是1,1如果你想从索引1开始,则在行和列中添加1:

array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
number = 16
per_row = 5
index = array.indexOf(number)
row = Math.floor(index/ per_row )
column = index % per_row