我的头衔可能很糟糕,但我可以在这里解释我想要的东西。首先,我正在挑战自己的一些非常具体的事情。即使你猜到我想要完成的事情,请把你的答案放在我在这里问的主题上,而不是我要解决的整体问题。
我有一串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 - 这就是我想要的。只是感觉应该有一种方法来使用算法而不是循环。
有什么想法吗?
答案 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