为什么我无法读取未定义的属性“ 0”?

时间:2019-06-17 13:32:03

标签: javascript

我正在尝试解决挑战,但是当我访问二维数组时,出现错误:

无法读取未定义的属性“ 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);

1 个答案:

答案 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);