我正在尝试解决挑战,但是当我访问二维数组时,出现错误:
无法读取未定义的属性“ 0”。
我试图通过添加参数的默认值来解决问题,但这没有用。
function minesweeper(matrix= [[]]) {
let res = [];
for(let i=0;i<matrix.length;i++){
let temp = [];
for(let j=0;j<matrix.length;j++){
temp.push( count(i,j,matrix) )
}
res.push(temp);
}
console.log(res);
}
function count(idx, jdx, matrix = []){
let count = 0;
for(let i=-1;i<=1;i++){
if(i + idx < 0) continue;
for(let j=-1;j<=1;j++){
if( jdx + j < 0 || (i == 0 && j == 0)) continue;
if(matrix[i+idx][j+jdx] == true) count += 1; // this line
}
}
return count;
}
let matrix = [[true, false, false],
[false, true, false],
[false, false, false]];
minesweeper(matrix);
答案 0 :(得分:3)
当i = 1且idx =(matrix.length-1)时,您将得到未定义的matrix [matrix.length]。您可以通过添加针对matrix[i+idx]
的简单检查来解决此问题:
function minesweeper(matrix= [[]]) {
let res = [];
for(let i=0;i<matrix.length;i++){
let temp = [];
for(let j=0;j<matrix.length;j++){
temp.push( count(i,j,matrix) )
}
res.push(temp);
}
console.log(res);
}
function count(idx, jdx, matrix = []){
let count = 0;
for(let i=-1;i<=1;i++){
if(i + idx < 0) continue;
for(let j=-1;j<=1;j++){
if( jdx + j < 0 || (i == 0 && j == 0)) continue;
if(matrix[i+idx] && matrix[i+idx][j+jdx] == true) count += 1; // this line
}
}
return count;
}
let matrix = [[true, false, false],
[false, true, false],
[false, false, false]];
minesweeper(matrix);