Angular 2中的数组索引超出范围

时间:2018-11-15 07:00:18

标签: javascript html arrays angular typescript

我想声明一个4维的数组,然后用for()循环一些内容-然后程序中断。这是我的代码:

打字稿:

MoarInfo: any = [[[[]]]];

JavaScript:

constructor(){
 for(var i = 0; i < this.AllDataInfo[this.KontoAktuellYearIndex][this.KontoAktuellMonth].length; i++){
  for(var a = 0; a < this.AllDataInfo[this.KontoAktuellYearIndex][this.KontoAktuellMonth][i].length; a++){
    for(var b = 0; b < this.AllDataInfo[this.KontoAktuellYearIndex][this.KontoAktuellMonth][i][a].length; b++){

      this.MoarInfo[i][a][b][0] = this.AllDataInfo[this.KontoAktuellYearIndex][this.KontoAktuellMonth][i][a][b][0];
      this.MoarInfo[i][a][b][1] = this.AllDataInfo[this.KontoAktuellYearIndex][this.KontoAktuellMonth][i][a][b][1];
      this.MoarInfo[i][a][b][2] = 'DetailsSpan';

    }
  }
}
}

该问题肯定在MoarInfo[][][][]数组中。我在没有它的情况下测试了我的代码,并且工作正常。我也尝试了Typescript数组声明的以下可能性:

Moarinfo: any[]; MoarInfo = []; MoarInfo = [[[[]]]]; MoarInfo: any[][][][] = [[[[]]]];

然后在JavaScript中,我尝试声明一个新的Array,然后将MoarInfo数组中的某些元素推入,它们具有不同的功能(拆分,取消移位,推入,连接),并且没有任何作用。

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

检查this.MoarInfo[i][a][b]的大小。您正在尝试通过索引0,1,2获取值。看起来它的大小小于2,这会导致此错误。

      if(this.MoarInfo[i][a][b].size > 0){
         this.MoarInfo[i][a][b][0] = this.AllDataInfo[this.KontoAktuellYearIndex][this.KontoAktuellMonth][i][a][b][0];
      }
       if(this.MoarInfo[i][a][b].size > 1){
           this.MoarInfo[i][a][b][1] = this.AllDataInfo[this.KontoAktuellYearIndex][this.KontoAktuellMonth][i][a][b][1];
       }
       if(this.MoarInfo[i][a][b].size > 2){
           this.MoarInfo[i][a][b][2] = 'DetailsSpan';
       }

答案 1 :(得分:0)

好的,我自己解决了。首先必须将elements中的dimensions中的array设置为空白,然后才能用内容填充它们。首先,我像这样的ArrayTypeScript中声明了一个AnArray = [];。然后,我切换到JavaScript(转到constructer()函数),并用空白elements填充它。我用this.AnArray.push();将其存档。如果要为第一个elements设置dimension,请使用push([]);,如果要为第四个element设置dimension,请使用push([[[]]]);。您可以像这样push([[['E1',0,0,'E2']]]);来设置内容空间。现在,您可以使用以下语法:

alert( this.AnArray[0][0][0][3] ); //returns 'E2'

我项目中的完整代码现在可以正常工作,并且看起来像这样:

 for(var i = 0; i < this.AllDataInfo[this.KontoAktuellYearIndex][this.KontoAktuellMonth].length; i++){
  this.test.push([[[]]]);

  for(var a = 0; a < this.AllDataInfo[this.KontoAktuellYearIndex][this.KontoAktuellMonth][i].length; a++){
    this.test[i].push([[]]);

    for(var b = 0; b < this.AllDataInfo[this.KontoAktuellYearIndex][this.KontoAktuellMonth][i][a].length; b++){
      this.test[i][a].push(['',0,'']);

      this.test[i][a][b][0] = this.AllDataInfo[this.KontoAktuellYearIndex][this.KontoAktuellMonth][i][a][b][0];
      this.test[i][a][b][1] = this.AllDataInfo[this.KontoAktuellYearIndex][this.KontoAktuellMonth][i][a][b][1];
      this.test[i][a][b][2] = 'DetailsSpan';

    }
  }
}

我想知道是否有比使用数组更好的方法,但是如果您也想这样做,可以这样做。

  • 欢呼