如何迭代"框"在二维数组中

时间:2017-10-04 15:45:32

标签: javascript arrays for-loop multidimensional-array

我试图迭代一个二维数组,然后迭代一个"框"在JavaScript中,在二维数组中的每个元素周围。这是通过"上面"行中的三个元素,"行"中的三个元素。元素存在于,然后是三个元素"下面" " row"这个元素存在于。我遇到了关于如何处理文字" edge"案例。换句话说,我试图在(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++;
          }
      }
    }

2 个答案:

答案 0 :(得分:0)

当k> = height或l&gt; = width或l或k中的任何一个小于0时,代码将失败的边缘情况有两种类型。要解决此问题,请在内部循环中进行用于迭代元素周围的框,您可以使用k < heightl < width再次添加对边案例的检查。同样在if条件下,您可以检查l >= 0k >= 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++;
          }
      }
    }

答案 1 :(得分:0)

你必须在你的迭代中考虑“限制”:如果你在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++;
        }
      }
    }
  }
}