Javascript TypeError:数组未定义

时间:2013-12-19 13:13:53

标签: javascript jquery arrays

在javascript中测试一些东西我正在构建一个小型的扫雷。

以下代码是二维数组P.field的初始化。之后,一些随机字段被x填满,表示该字段中有一个地雷。

P.field = new Array(num);
for (var i = 0; i < P.field.length; i++)
    P.field[i] = new Array(num);

$.each(P.field, function(index, key) {
    $.each(key, function(i, k) {
        P.field[index][i] = '-';                
    });
});

var arr = [];
while (arr.length < 10) {
    var found = false;
    var randomnumber = Math.ceil(Math.random()*(num*num-1));
    for (var i = 0; i < arr.length; i++)
    if (arr[i] == randomnumber) { found = true; break; }
    if (!found) arr[arr.length] = randomnumber;
}

for (var i = 0; i < arr.length; i++) {
    P.field[ Math.floor(arr[i]/num) ][ Math.floor(arr[i]-Math.floor(arr[i]/num)*num)-1 ] = 'x';
}

但是,在我计算周围字段中的地雷的算法中,我得到了控制台错误TypeError: P.field[(r+1)] is undefined。每个字段(除了最后一行的字段)都会返回此错误,这是我无法理解的。

在我的测试中,

P.field[rows][columns]每个维度的长度为10([10] [10])。当我尝试将P.field[9][0]的值设为P.field[9][9]时,没有任何错误。但是,当我添加任何较小的行时,此异常就会启动(P.field[0 + 1][0]P.field[3 + 1][6],以及所有这些... ...

我希望有人可以告诉我原因。

修改

更多代码:

onReady: function() {
    $('#sweeper table').on('click', 'td', function(e) {
        var row = $(this).parent().attr('class'); // Class represents the index of the array
        var column = $(this).attr('class'); // Class represents the index of the array

        P.openField(row, column, $(this));
    });
},

openField: function(r, c, e) {
    if ( P.field[r][c] == 'x' ) {
        e.addClass('mine');
    } else {
        e.html( P.surroundingMineCount(r, c) );
        e.addClass('opened');
    }
},

surroundingMineCount: function(r, c) {
    var count = 0;
    if ( P.field[r][c-1] == 'x' ) count++;
    if ( P.field[r-1][c-1] == 'x' ) count++;
    if ( P.field[r][c+1] == 'x' ) count++;
    if ( P.field[r-1][c] == 'x' ) count++;
    if ( P.field[r-1][c+1] == 'x' ) count++;
    if ( P.field[r+1][c] == 'x' ) count++;  
    if ( P.field[r+1][c-1] == 'x' ) count++;
    return count;
},

现在我没有验证,如果r + 1或r-1实际上是该数组的有效索引(我有一个,但删除它进行测试)。然而,这实际上不是错误,因为我甚至在表格中间出现错误。

1 个答案:

答案 0 :(得分:1)

查看您提供的代码与您抛出的错误,我对您怀疑的原因持怀疑态度,因为使用的代码确实生成了正确的数组。

我怀疑这可能是一个稍微简单的问题,您提供的示例生成代码使用:

P.field = new Array(num);

以P为首都,而您抛出的错误将其用作小写:

TypeError: p.field[(r+1)] is undefined

你确定你在测试时没有意外地使用过不正确的情况吗?