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

Javascript 使用索引查找矩阵中的位置,javascript,Javascript,我的标题可能很糟糕,但我可以准确地解释我在这里想要什么。首先,我要挑战自己做一些非常具体的事情。即使你猜到了我想要完成的事情,请把你的答案放在我要问的主题上,而不是我要解决的整个问题上 我有一个由25个字母组成的字符串。 我通过str.indexOf(c)得到一个字母的索引,假设索引是16。 设想str是5x5表的线性表示,因此16的索引将是该表的第4行第2列 我试图找到一种使用javascript查找行和列的方法,而不必像这样循环: var row = 1; var index = str.i

我的标题可能很糟糕,但我可以准确地解释我在这里想要什么。首先,我要挑战自己做一些非常具体的事情。即使你猜到了我想要完成的事情,请把你的答案放在我要问的主题上,而不是我要解决的整个问题上

我有一个由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++;
}
在上面的代码中,如果索引从16开始,我的最终结果将是第4行,索引2——这就是我想要的。感觉应该有一种方法可以通过算法而不是循环来实现这一点


有什么想法吗?

为什么不用数学呢

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

您可以创建一个函数,而不是使用循环

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}

如果您在这个代码示例中复制除法和模数,您可以通过执行
row=Math.floor(index/5)
col=index%5
来实现同样的效果

var index=parseInt(提示符('Numeric index');
变量行=数学层(指数/5)+1;
var col=指数%5;

警报(“[”+列+“,“+行+”])试试这个,您可以使用余数(或模数)来查找列,使用整数来查找行

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

您可以计算位置,此解决方案取决于从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

如果没有余数,Math.ceil不会给您错误的行吗?它将是Math.floor(),您需要删除小数点。此外,您需要添加1以获得行号,而不是其索引。:)谢谢,这个也很有帮助,但是没有在行中添加1,这个位置就被取消了。我觉得有点傻,我没有考虑划分和模数-但这是一个漫长的一天,我想我正在寻找一个更难的答案。我还不能投票,所以我希望其他人能投票。index/columnsPerRow 16/5=3.2我接受这个,就像你第一个一样,但我发现你不需要在模数上加一个。我的大脑因工作而有点死气沉沉,我一直在做索引/列,得到3.2,这不等于我预期的4.2。我没想到要添加一个…@JonathanWalker:这取决于你是从0还是从1开始计算行和列。如果你开始用一种方法计算,为了保持一致性,我觉得用另一种方法计算似乎是个好主意。根据下面的评论,我觉得有点傻。当我尝试简单除法时,我一直得到3.2的结果,这不是我想要的。我没有想到简单地加1(因为我想要的是行号,而不是索引)。谢谢大家的快速回答,我很抱歉我的问题太愚蠢了,值得投几票反对票。我必须更努力地建立一个更好的声誉,这样我才能在将来投票选出有用的答案。