javascript - 如何遍历由二维数组表示的板上单元格的所有邻居?

标签 javascript arrays algorithm loops conways-game-of-life

在这里构建 Game of Life 并开发一个函数来循环遍历一个单元格的所有邻居并对分数求和(每个单元格为 0 或 1)。棋盘由二维数组表示。通常一个小区有8个邻居。问题是电路板 Angular 落的单元格只有 3 个邻居,而侧面的单元格有 5 个。如果我使用下面的代码遍历数组,一些邻居在数组中返回未定义。我想将 undefined 转换为 0 并用它来总结分数,但我得到了错误:

未捕获的类型错误:无法读取未定义的属性“-1”

感谢您的帮助!

var array = [
    [0,0,1,0,1,0,1,0,1,1],
    [0,0,1,0,1,0,1,0,1,1],
    [0,0,1,0,1,0,1,0,1,1],
    [0,0,1,0,1,0,1,0,1,1],
    [0,0,1,0,1,0,1,0,1,1],
    [0,0,1,0,1,0,1,0,1,1],
    [0,0,1,0,1,0,1,0,1,1],
    [0,0,1,0,1,0,1,0,1,1],
    [0,0,1,0,1,0,1,0,1,1],
    [0,0,1,0,1,0,1,0,1,1]
]

for(var i=0; i < array.length; i++){
    for(var j=0; j < array[i].length; j++){

    var totalScore = 0;        
    var scores = [
        //i = row in loop
        //j = column nested loop  
        array[i-1][j-1],
        //upper left corner
        array[i-1][j],
        //top side
        array[i-1][j+1],
        //upper right corner
        array[i][j-1],
        //left side
        array[i][j+1],
        //right side
        array[i+1][j-1],
        //bottom left corner
        array[i+1][j],
        //bottom side
        array[i+1][j+1]
        //bottom right corner
        ];

        scores.forEach(function(item){

              var score = item;
              if(score === "undefined"){

                score = 0;

              }

              totalScore += score;

            })

            console.log(totalScore);    

    }

}

最佳答案

只是很多边界检查:

var scores = [
  i > 0 && j > 0 ? array[i-1][j-1] : 0,
  i > 0 ? array[i-1][j] : 0,
  i > 0 && j < array[i].length-1 ? array[i-1][j+1] : 0,
  j > 0 ? array[i][j-1] : 0,
  j < array[i].length-1 ? array[i][j+1] : 0,
  i < array.length-1 && j > 0 ? array[i+1][j-1] : 0,
  i < array.length-1 ? array[i+1][j] : 0,
  i < array.length-1 && j < array[i].legnth-1 ? array[i+1][j+1] : 0
];

您还可以创建一个函数来充当中介并通过它访问数组:

function getCell(x,y) {
  if(y < 0 || y >= array.length || x < 0 || x >= array[0].length) {
    return 0;
  }
  return array[y][x];
}

关于javascript - 如何遍历由二维数组表示的板上单元格的所有邻居?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41295094/

相关文章:

javascript - 使用 require.js 进行跨域调用时出现问题?

c - 将特定大小的数组传递给 C 中的函数

java - 将 Queue 和 Stack 相互复制

algorithm - 对仅包含 a-z 和空格的单词数组进行排序的最快方法是什么?

java - 如何在 java 中交换 int 的位置?

javascript - line 是什么意思 : var DYN_WEB = DYN_WEB || {}; in js?

javascript - 如何访问我的新 Symfony API

javascript - Jquery - 具有多个类元素的 mousedown 函数

java - 即使设置了抛出 IllegalArgumentException 也更新对象

javascript - 如何构造具有动态值和多级数组的 json