在这里,我将所有控制台和代码放在下面。我想将数组推入数组,例如。在imagesArray中有3个数组,现在我推送了具有2个数组的结果数组,因此第一个数组已正确推送到imagesArray中,但最后一个数组显示未定义且未推送,并给出了像imageArray未定义的错误,因此如何推送? (我在下面放置了控制台和代码)
在推送对象控制台之前imagesArray
我要推送result
按下控制台后就是这样
add-folder.component.ts
imagesArray : UploadedImages[] = [];
dialogRef.afterClosed().subscribe(result => {
if(result != '' && result != undefined && result != null){
for(var i = 1; i <= result.length ; i++){
this.imagesArray.push(result[i]);
}
}
});
add-folder.component.html
<div>
<mat-card *ngFor="let images of imagesArray" style="height : 100px;width : 100px">
<b>{{images.imageName}}</b>
<b>{{images.filesize}}</b>
</mat-card>
</div>
答案 0 :(得分:2)
在此代码中
imagesArray : UploadedImages[] = [];
dialogRef.afterClosed().subscribe(result => {
if(result != '' && result != undefined && result != null){
for(var i = 1; i <= result.length ; i++){
this.imagesArray.push(result[i]);
}
}
});
您将从位置1开始array
。数组从0开始。
因此,数组中有2个元素[element1, element2]
。您的代码首先将获得位置编号1(element2),然后插入另一个array
。
然后,下一次迭代i
等于2,等于result.length
,this.imagesArray.push(result[i]);
将尝试获取位置2,该位置不存在,然后推入未定义到imagesArray
中。
将代码更改为:
for(var i = 0; i < result.length ; i++){
this.imagesArray.push(result[i]);
}
答案 1 :(得分:1)
您正在将循环变量i
初始化为1
,result
应该有一个从0开始的索引,这意味着您应该制作i = 0
,并减少使用大于(<
而不是小于或等于(<=
)
这就是为什么您未定义为添加到数组的最后一个对象
imagesArray : UploadedImages[] = [];
dialogRef.afterClosed().subscribe(result => {
if(result != '' && result != undefined && result != null){
for(var i = 0; i < result.length ; i++){
this.imagesArray.push(result[i]);
}
}
});
答案 2 :(得分:1)
在推送所有值之后,数组中就有一个export class AuthenticationService {
constructor(private localStorage: Storage) {
}
}
值。在每个订阅中将数组设置为空,然后按下以避免使用空值。
undefined
还使用可选的运算符仔细检查数组元素是否未定义。
dialogRef.afterClosed().subscribe(result => {
this.imagesArray = [];
if(result != '' && result != undefined && result != null){
for(var i = 0; i <= result.length ; i++){
this.imagesArray.push(result[i]);
}
}
});
答案 3 :(得分:1)
List的长度将返回2
,数组的索引从0
开始,所以result.length - 1
。
所以您可以这样做:
更改:
var i = 0; // Start from zero because arrays are starts from `0` so we can access the first item as list[0]
还有
result.length - 1; // Subtract 1 from length of list
应用更改后的代码:
dialogRef.afterClosed().subscribe(result => {
if(result != '' && result != undefined && result != null){
for(var i = 0; i <= result.length - 1; i++){
this.imagesArray.push(result[i]);
}
}
});
您可以执行以下操作而无需从长度中减去-1,只需将条件参数更改为i < result.length
即可:
dialogRef.afterClosed().subscribe(result => {
if(result != '' && result != undefined && result != null){
for(var i = 0; i < result.length; i++){
this.imagesArray.push(result[i]);
}
}
});
答案 4 :(得分:0)
这是将数组推入打字稿中的数组的最新更新方式。 您可以使用扩展运算符轻松扩展数组
array1: [...array1, ...array2]
这将扩展array1并将array2中的元素添加到array1中。
您可以在-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
中找到更多相关信息