我正在尝试通过二维数组迭代,然后在JavaScript中遍历两个维数阵列中每个元素的"框"。那是通过"行上方"中的三个元素,"行"中存在的三个元素,然后是"行"下方的三个元素。与字面的"边缘"案件有关。换句话说,我正在尝试通过(o)周围的X迭代:
[[x, x, x, o],
[x, (o), x, o],
[x, x, x, o]]
,这是(O)处于边缘时要迭代的内容:
[[(o), x, o, o],
[x, x, o, o],
[o, o, o, o]]
关于我如何在JavaScript中执行此操作的任何想法?
这是我到目前为止所拥有的:
//iterates through each cell
for(var i = 0; i < height; i++){
for(var j = 0; j < width; j++){
var counter = 0;
//iterates through a box around each cell
for(var k = i - 1; k <= i + 1; k++){
for(var l = j - 1; l <= j + 1 ; l++){
if(cells[k][l].status === "alive"){
counter++;
}
}
}
当k> =高度或l> =宽度或l或k小于0时,您的代码在k> = height> =时会失败两种类型的边缘情况。在您使用的内部循环中,您可以使用k < height
和l < width
再次添加边缘案例的支票。另外,在情况下,您可以检查l >= 0
和k >= 0
for(var i = 0; i < height; i++){
for(var j = 0; j < width; j++){
var counter = 0;
//iterates through a box around each cell
for(var k = i - 1; k < height && k <= i + 1; k++){
for(var l = j - 1; l < width && l <= j + 1 ; l++){
if(l >= 0 && k >= 0 && cells[k][l].status === "alive"){
counter++;
}
}
}
您必须在迭代中考虑"限制":如果您在位置0:0,则无法检查位置-1:-1或类似
//iterates through each cell
for (var i = 0; i < height; i++) {
for (var j = 0; j < width; j++) {
var counter = 0,
fromX = i === 0 ? 0 : i - 1,
toX = i === width ? i : i + 1,
fromY = j === 0 ? 0 : j - 1,
toY = j === height ? j : j + 1;
//iterates through a box around each cell
for (var k = fromX; k <= toX; k++) {
for (var l = fromY; l <= toY; l++) {
if (cells[k][l].status === "alive") {
counter++;
}
}
}
}
}