TypeScript - 初始化一个二维数组出错

6

我正在尝试创建一个二维数组来存储坐标,格式为[[x_1,y_1,z_1], [x_2,y_2,z_2], [...],...]

这是我的初始化和声明代码:

var ALLcoordinates:number[][];

for (var i=0; i< dims; i++) {
    ALLcoordinates[i]=[];
    for (var j=0; j<chainSize; j++){
        ALLcoordinates[i][j]=0;
    }
}

此后,在此循环中为每行分配新值:

for (var i = 0; i < chainSize; i++) {
    var alea1 = Math.floor(Math.random()*(3-0+1))+0;
    var alea2 = Math.floor(Math.random()*(3-0+1))+0;
    var alea3 = Math.floor(Math.random()*(3-0+1))+0;
    var coordinates:number[];
    coordinates = [alea1,alea2,alea3];
    ALLcoordinates[i]=coordinates;

}

但是当我编译它时,对于这行代码 ALLcoordinates[i] = []; 我得到了这个错误 Uncaught TypeError: Cannot set property '0' of undefined

非常感谢任何帮助,谢谢。


1
这是 TypeScript 还是 JavaScript?这不是在 TypeScript 中声明变量的正确方式。 - Koby Douek
2个回答

7
声明数组并不会初始化它。
你需要初始化 ALLcoordinates
var ALLcoordinates:number[][];

ALLcoordinates = [];            //  ◄ initialize the array

for (var i=0; i< dims; i++) {
    ALLcoordinates[i]=[];
    for (var j=0; j<chainSize; j++){
        ALLcoordinates[i][j]=0;
    }
}

6

当您执行var ALLcoordinates:number[][];时,您没有使用任何值进行初始化。您只是指定了它的类型。在运行时它仍然是undefined。因此,在使用undefined[0]时会抛出错误。在使用之前,请先对其进行初始化:

var ALLcoordinates: number[][] = [];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接