继续获取“TypeError:无法设置未定义的属性'1'”

时间:2017-12-29 17:15:39

标签: javascript arrays

我正在尝试解决算法问题,但我一直收到这个错误,这让我很沮丧:

    var data = [".......", "...O...", "....O..", ".......", "OO.....", "OO....."]
    var R = 6;
    var C = 7;
    var N = 3;
    var cell = new Array(R);
    for (i=0; i<R; i++) {
        cell[i] = new Array(C);
    }
    for (i=0; i<R; i++) {
        var currentRow = data[i].split("");
        for (j=0; j<C; j++) {
            cell[i][j] = currentRow[j];
        }
    }
    for (x=0; x<=N; x++) {
        for (i=0; i<R; i++) {
            for (j=0; j<C; j++) {
                if (cell[i][j] == '.') {
                    cell[i][j] = 0;
                } else if (cell[i][j] == 'O') {
                    cell[i][j] = 1;
                } else if (cell[i][j] == 3) {
                    cell[i][j] = 0;
                    // Why are these following 4 LINES are not working???
                    cell[i + 1][j] = 0;
                    cell[i - 1][j] = 0;
                    cell[i][j + 1] = 0;
                    cell[i][j - 1] = 0;
                } else if (cell[i][j] >= 0) {
                    cell[i][j] += 1;
                }
            }
        }
    }

罪魁祸首是当我们尝试使用像

这样的操作的2D数组时
cell[i + 1][j] = 0;
cell[i - 1][j] = 0;
cell[i][j + 1] = 0;
cell[i][j - 1] = 0; 

我不知道原因,但继续TypeError: Cannot set property '1' of undefined

2 个答案:

答案 0 :(得分:1)

如果数组的第一个水平或第一个垂直单元格等于3,则不能执行i - 1j -1。同样的事情,如果最后一个水平单元格或最后一个垂直单元格等于3,则不能i + 1j + 1。所以你只需要检查wheter不是你的二维数组的第一个或最后一个垂直单元格。

答案 1 :(得分:1)

看起来这些代码行有时会访问数组的边界。通过更改这4行来保证访问保持在边界内,代码将在没有错误消息的情况下工作,如下所示:

                // Why are these following 4 LINES are not working???
                if (i < R - 1) {
                    cell[i + 1][j] = 0;
                }
                if (i > 0) {
                    cell[i - 1][j] = 0;
                } 
                if (j < C - 1) {
                    cell[i][j + 1] = 0;
                }
                if (j > 0) {
                    cell[i][j - 1] = 0;
                }

这是link to a jsfiddle我放置了更新的代码。