You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用二维数组实例化类对象?代码报错求助

解决二维数组初始化时的赋值错误问题

嘿,你这段代码运行时会抛出Cannot set properties of undefined (setting '0')这类错误,原因很简单:你在还没给二维数组的每一行创建容器的时候,就直接尝试给行里的元素赋值了。

一开始this.board只是个空数组,当第一次进入循环时,this.board[i](也就是this.board[0])是undefined,你直接对undefined使用下标[y]赋值,自然会报错。

修复方案:先初始化每一行的数组

我们只需要在列循环之前,先给当前行创建一个空数组,再往里面填充元素就行:

class Board {
  constructor(row, col) {
    this.board = [];
    for (var i = 0; i < row; i++) {
      // 先给当前行初始化一个空数组
      this.board[i] = [];
      for (var y = 0; y < col; y++) {
        this.board[i][y] = 0;
      }
    }
  }
}
var board = new Board(10, 10);
console.log(board.board); // 现在能正常输出10×10的全0二维数组啦

更简洁的写法(推荐)

如果不想写嵌套循环,也可以用Array.from来快速创建二维数组,代码更简洁还能避免手动循环的疏漏:

class Board {
  constructor(row, col) {
    // Array.from会为每一行生成独立的数组,避免引用共享问题
    this.board = Array.from({ length: row }, () => Array(col).fill(0));
  }
}
var board = new Board(10, 10);

这里要注意:别直接用Array(row).fill(Array(col).fill(0)),这种写法会让所有行都指向同一个数组实例,修改其中一行的元素时,其他行也会跟着变,而Array.from的回调函数会为每一行创建新的数组,就不会有这个问题啦。

内容的提问来源于stack exchange,提问作者KT-mongo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:07:50