JavaScript 2d 数组导致“无法读取未定义的属性'未定义'”

JavaScript 2d array causing "Cannot read property 'undefined' of undefined"

本文关键字:未定义 属性 读取 数组 2d JavaScript      更新时间:2023-09-26

我正在尝试从 JavaScript 中的全局 2D 数组中读取,它给了我"无法读取未定义的属性'未定义'"。

以下是我定义数组的方式:

var cell = {visited:false, left:true, top:true, right:true, bottom:true}
var cells = new Array(10);
for (i = 0; i < 10; i++) //Initiate 2d cells array.
{
  cells[i] = new Array(cell,cell,cell,cell,cell,cell,cell,cell,cell,cell);
}

然后我稍后会像这样访问它:

if(x != 0) //Left
{
    if(cells[x-1][y].visited == false)
    {
        //Do something
    }
}

x 和 y 永远不会超出定义的数组的范围,所以我不确定为什么会发生这种情况。

谢谢!

要创建全局变量,您需要在全局范围内创建它,或者在声明它时省略var关键字。如我所见,您使用var关键字,因此只有在全局范围内创建变量时,您的变量才能是全局的。

只需使用cells = new Array(10);而不是var cells = new Array(10);

顺便说一句。如果可能的话,最好避免使用全局变量。

建议

此外,我建议您以这种方式创建二维数组。通过引用传递cell变量。因此,在一个地方更改它将在任何地方更改它。

cells = new Array(10).fill().map(function(cell) {
    return new Array(10).fill().map(function() {
        return {visited:false, left:true, top:true, right:true, bottom:true};
    })
});