【问题标题】:Array index out of bounds in Angular 2Angular 2中的数组索引超出范围
【发布时间】:2019-04-18 05:37:29
【问题描述】:

我想声明一个 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 中,我尝试声明一个新数组,然后将一些元素推送到 MoarInfo 数组上,具有不同的功能(拆分、取消移位、推送、连接),但没有任何效果。

我做错了什么?

【问题讨论】:

    标签: javascript html arrays angular typescript


    【解决方案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';
           }
    

    【讨论】:

    • 我猜是this.MoarInfo[i][a][b].length?在这种情况下,它的 0。this.MoarInfo[i][a].length 是 1,this.MoarInfo[i].length 也是 1。是的,你是对的!
    • 那么最好在访问之前检查索引。用相同的方式更新了答案。
    • 谢谢你的回答,但这只是避免了错误,如果数组能保存我告诉他的值,我将不胜感激^^
    【解决方案2】:

    好的,我自己想通了。您必须首先将array 中的dimensionselements 设置为空白,然后您可以用内容填充它们。首先,我在TypeScript 中声明了一个Array,就像这样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';
    
        }
      }
    }
    

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

    • 干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多