TypeScript 二维数组生成 要注意初始化 TypeError: Cannot set properties of undefined (setting '1')

发布时间 2023-07-20 19:56:20作者: 赋流
private _dataMap:Vec3[][] = [];
private _userDataMap:number[][] = [];

init() {

    for(let i = 1; i <= 4; i++){
        for(let j = 1; j <= 4; j++){this._dataMap[i][j] = new Vec3(i, j, 0);
            this._userDataMap[i][j] = 0;
        }
    }
}
其中 this._dataMap[i][j] = new Vec3(i, j, 0); 语句报错  TypeError: Cannot set properties of undefined (setting '1')

这个问题是因为 _dataMap 和 _userDataMap 的初始值是一个空数组,数组中没有任何元素。所以当你尝试通过索引来设置值时,会出现 "Cannot set properties of undefined" 的错误。

要解决这个问题,你需要在循环开始之前将数组初始化为具有正确维度的二维数组。可以使用以下代码来初始化两个数组:

 

for(let i = 0; i <= 4; i++){
  this._dataMap[i] = [];
  this._userDataMap[i] = [];
  for(let j = 0; j <= 4; j++){
    this._dataMap[i][j] = new Vec3(i, j, 0);
    this._userDataMap[i][j] = 0;
  }
}

在上述代码中,我们首先通过将空数组 [] 赋值给 this._dataMap[i] 和 this._userDataMap[i],来初始化每行的数组。然后在内部循环中,我们可以通过索引来设置每个元素的值,并防止错误发生。