在这里构建 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/