Angular 4中无法设置undefined的属性'0'问题求助
问题分析与解决方案
从你描述的现象和代码来看,问题的核心是**dataTuple二维数组没有提前完成完整的初始化**:
- 当
i=0时,this.dataTuple[0]应该是已经存在的数组(可能你之前手动初始化过这一行),所以给它的任意j索引赋值都没问题; - 但当
i≥1时,this.dataTuple[i]是undefined,此时尝试给undefined[j](比如j=0)赋值,就会触发“无法给undefined的属性赋值”的错误。
修复后的代码
你需要在外层循环中,先为每个i对应的行创建一个空数组,再在内层循环中填充数据:
// 先初始化整个dataTuple的结构 this.dataTuple = []; for(let i=0; i<this._devices.length; i++ ) { // 为第i行创建一个空数组,避免后续赋值时出现undefined this.dataTuple[i] = []; for(let j=0;j<this._devices[i].devstatus.length;j++) { this.dataTuple[i][j] = [new Date(this._devices[i].devtime[j]).getTime() + this.indiaUTC , this._devices[i].devstatus[j]]; } }
额外优化建议
如果想让代码更简洁易读,也可以用数组的map方法来实现,它会自动帮你完成二维数组的初始化,避免手动循环时遗漏行的创建步骤:
this.dataTuple = this._devices.map(device => { return device.devstatus.map((status, j) => { return [new Date(device.devtime[j]).getTime() + this.indiaUTC, status]; }); });
内容的提问来源于stack exchange,提问作者lakshmipathi B
相关产品推荐
相关产品推荐

