Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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中的二维结构数组_Javascript_Arrays - Fatal编程技术网

JavaScript中的二维结构数组

JavaScript中的二维结构数组,javascript,arrays,Javascript,Arrays,我想在javascript中创建二维数组,其中每个单元格都是具有属性的结构。如何访问单元结构的属性 这是我的代码: 谢谢 ----更新---- 我犯了这个错误 TypeError: Cannot set property 'mine' of undefined (line 38) 这是我的密码 //扫雷游戏 //询问用户游戏的大小 var rows=行数(提示(“请输入行数”,“10”)); var cols=编号(提示(“请输入列数”,“10”)); //计算矿井数量 var矿山=数学地板(

我想在javascript中创建二维数组,其中每个单元格都是具有属性的结构。如何访问单元结构的属性

这是我的代码: 谢谢

----更新---- 我犯了这个错误

TypeError: Cannot set property 'mine' of undefined (line 38)
这是我的密码
//扫雷游戏
//询问用户游戏的大小
var rows=行数(提示(“请输入行数”,“10”));
var cols=编号(提示(“请输入列数”,“10”));
//计算矿井数量
var矿山=数学地板(行*列*0.2);
//函数创建单元格对象
功能单元(值,打开){
返回{
“价值”:价值,
“开放”:开放,
“我的”:假的
};
};
//初始化所有单元格
var game=新阵列(行);
对于(变量i=0;i
更新:我不知道为什么我的答案被否决了,因为这是在OP发布更新之前发布的,但不管怎样

我只是这样做了:

            // function to create cell objects
            function cell() {
                return {
                    "value": 0,
                        "open": 0,
                        "mine": false
                };
            };

            // initialise all cells
            var game = new Array(10);

            for (var i = 0; i < 10; i++) {
                game[i] = new Array(10);

                for (var j = 0; j < 10; j++) {
                    game[i][j] = cell();
                }
            }
            console.log(game[0][0].mine);
//用于创建单元格对象的函数
功能单元(){
返回{
“值”:0,
“打开”:0,
“我的”:假的
};
};
//初始化所有单元格
var游戏=新阵列(10);
对于(变量i=0;i<10;i++){
游戏[i]=新阵列(10);
对于(var j=0;j<10;j++){
game[i][j]=cell();
}
}
console.log(游戏[0][0].mine);

我在我的控制台上得到了正确的值。访问它到底有什么问题?

问题不在于数组本身,而在于代码中的最后一条if语句

  if( game[i][j].mine === false){
    game[i][j].mine = true;
    placedMine = true;
  }
在前面的for循环中定义并使用了j。当
j
等于
cols
且j保留该值(
cols
的值)时,for循环退出,因此if语句中的条件等于

  if( game[0][cols].mine === false){
     ...
  }
由于您从未将任何内容分配给
game[0][cols]
,因此表达式(
game[0][cols]
)未定义,并且没有名为
mine

你也有一个功能缺陷。您在最后一个for循环中使用i作为地雷计数器以及行号。我想你真正想做的是

// place mines randomly
for(var i = 0 ; i < mines ; i++){
  var placedMine = false;
  while(!placedMine){
    var row = Math.floor((Math.random()*rows)),
        col = Math.floor((Math.random()*cols)),
        cell = game[row][cell];

    if(cell.mine === false){
      cell.mine = true;
      placedMine = true;
    }
  }
}
//随机放置地雷
对于(var i=0;i
我做了三个改变:

  • 我给了
    x
    y
    更多的描述性名称
  • 我声明了一个名为
    cell
  • 我使用了
    row
    col
    (以前是
    x
    y
    )作为索引,而不是
    I
    j

  • 通过创建一个变量来保存单元格引用,您不再需要两次索引,重命名x和y使代码更易于阅读(特别是因为x通常是水平值,也就是列号,y通常是垂直值)

    您的代码示例完全按照您想要的方式工作。哦,天哪!我怎么会错过这个!非常感谢!
      if( game[i][j].mine === false){
        game[i][j].mine = true;
        placedMine = true;
      }
    
      if( game[0][cols].mine === false){
         ...
      }
    
    // place mines randomly
    for(var i = 0 ; i < mines ; i++){
      var placedMine = false;
      while(!placedMine){
        var row = Math.floor((Math.random()*rows)),
            col = Math.floor((Math.random()*cols)),
            cell = game[row][cell];
    
        if(cell.mine === false){
          cell.mine = true;
          placedMine = true;
        }
      }
    }