Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从二维网格中查找一维数组上的数组索引_Javascript_Arrays_Math - Fatal编程技术网

Javascript 从二维网格中查找一维数组上的数组索引

Javascript 从二维网格中查找一维数组上的数组索引,javascript,arrays,math,Javascript,Arrays,Math,假设我有下面的网格,网格的每个单元格都有一个映射到1d数组的索引 0, 1, 2 3, 4, 5, 6, 7, 8 我可以用1d数组来表示这一点,比如:[0,1,2,3,4,5,6,7,8] 我想知道一种将二维坐标(如(3,1))映射到其在数组中的索引的简单方法,在本例中是2 在做了大量研究之后,我发现很多人都在建议这个等式:index=x+(y*width),但在我的测试中它似乎不起作用 例如,对于(1,1),结果将是索引=1+(1*3)=4,对于(3,1),结果将是索引=3+(1*3)=6

假设我有下面的网格,网格的每个单元格都有一个映射到1d数组的索引

0, 1, 2
3, 4, 5,
6, 7, 8
我可以用1d数组来表示这一点,比如:
[0,1,2,3,4,5,6,7,8]

我想知道一种将二维坐标(如
(3,1)
)映射到其在数组中的索引的简单方法,在本例中是
2

在做了大量研究之后,我发现很多人都在建议这个等式:
index=x+(y*width)
,但在我的测试中它似乎不起作用

例如,对于
(1,1)
,结果将是
索引=1+(1*3)=4
,对于
(3,1)
,结果将是
索引=3+(1*3)=6
,这对我来说没有任何意义


有没有可能以一种简单的方式实现这一点?或者我需要使用迭代器,比如for?

2D矩阵表示法通常是
(行,列)
,索引从0开始

因此,
(3,1)
无效:只有3行,从0到2
(1,1)
表示第二行第二列,在您的示例中是
4
。因此,公式如下:

(row * width) + col
(2, 1) = 2*3+1 = index 7
再次对第一行/列使用0

如果您真的想继续考虑从1开始的索引,只需将公式更改为:

((row - 1) * width) + (col - 1) = 1D index 

在您的例子中,它将是
index=(x-1)+((y-1)*宽度)
,因为坐标系从1开始,数组从0开始

让arr=[0,1,2,3,4,5,6,7,8];
函数getPosition(x、y、宽度){
返回x-1+(y-1)*宽度;
}
console.log({
位置:getPosition(3,1,3),
元素:arr[getPosition(3,1,3)]

});
这确实是
索引=x+y*宽度
(不需要括号)或
索引=y+x*宽度
,这取决于您是否希望平面数组像您的问题一样将行保持在一起(
[0,1,2,3,4,5,6,7,8,9]
索引=x+y*宽度
),或将列保持在一起(
[0,3,6,1,4,7,2,5,8]
index=y+x*width
)。但是索引通常从0开始,而不是从1开始。所以你的(1,1)应该是(0,0),你的(3,1)应该是(2,0)

以下是第一点:

//0,1,2
// 3, 4, 5
// 6, 7, 8
常数a=[0,1,2,3,4,5,6,7,8];
设x=0,y=1;
设指数=x+y*3;
log(`(${x},${y})是索引${index},值${a[index]}`);
x=2;
y=0;
指数=x+y*3;

console.log(`(${x},${y})是索引${index},值${a[index]}`);
你知道js中的索引以0开头吗?2D矩阵表示法通常是
(行,列)
,索引以0开头。因此,
(3,1)
无效(只有3行,从0到2)。如果你从1开始索引,它将是
(3,1)=6
,第3行,第1列。您应该使用
索引=x-1+(y-1*宽度)
我确实想指出,虽然我不喜欢它,但数学确实经常使用基于1的索引。