打字稿 - 初始化2D数组ERROR

时间:2017-06-14 09:20:40

标签: arrays typescript multidimensional-array

我正在尝试为[[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;

}

但是当我编译它时,我为此行Uncaught TypeError: Cannot set property '0' of undefined

收到此错误ALLcoordinates[i] = [];

感谢任何帮助,谢谢

2 个答案:

答案 0 :(得分:3)

声明数组不会初始化它。

您错过了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;
    }
}

答案 1 :(得分:2)

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

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