如何使用二维数组实例化类对象?代码报错求助
解决二维数组初始化时的赋值错误问题
嘿,你这段代码运行时会抛出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
相关产品推荐
相关产品推荐

