Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript 2d数组导致“错误”;无法读取属性';未定义';“未定义”的定义;_Javascript_Arrays_Multidimensional Array_Undefined - Fatal编程技术网

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

JavaScript 2d数组导致“错误”;无法读取属性';未定义';“未定义”的定义;,javascript,arrays,multidimensional-array,undefined,Javascript,Arrays,Multidimensional Array,Undefined,我试图从javascript中的全局2d数组中读取数据,它给了我“无法读取未定义的属性'undefined'” 下面是我定义数组的方式: 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

我试图从javascript中的全局2d数组中读取数据,它给了我“无法读取未定义的属性'undefined'”

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

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);
}
x和y永远不会超出定义数组的界限,所以我不确定为什么会发生这种情况


谢谢

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

只需使用
cells=新数组(10)而不是
var单元格=新数组(10)

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

暗示 此外,我建议您以这种方式创建二维数组。 通过引用传递
单元格
变量。所以在一个地方改变它会在任何地方改变它

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};
    })
});

x和y是什么?它们是如何创建和修改的?由您确定x-1和y只能是0-9之间的数字。您在哪些范围内创建和使用阵列?因为使用
var
它不会是全局的。那么我如何使它成为全局的呢?在变量名之前删除
var
关键字请不要推荐这种可怕的做法。使用
var
声明它,但在全局范围内。或者更好,将所有代码封装在一个IIFE中。我已经提出了修复建议,并解释了它不起作用的原因。我也说过,如果可能的话,最好避免全局变量。
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};
    })
});