如何在角度数组中推数组?

时间:2018-11-30 11:59:48

标签: javascript angular

在这里,我将所有控制台和代码放在下面。我想将数组推入数组,例如。在imagesArray中有3个数组,现在我推送了具有2个数组的结果数组,因此第一个数组已正确推送到imagesArray中,但最后一个数组显示未定义且未推送,并给出了像imageArray未定义的错误,因此如何推送? (我在下面放置了控制台和代码)

在推送对象控制台之前imagesArray

enter image description here

我要推送result

的结果

enter image description here

按下控制台后就是这样

enter image description here

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>

5 个答案:

答案 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.lengththis.imagesArray.push(result[i]);将尝试获取位置2,该位置不存在,然后推入未定义到imagesArray中。

将代码更改为:

for(var i = 0; i < result.length ; i++){
    this.imagesArray.push(result[i]);
}

答案 1 :(得分:1)

您正在将循环变量i初始化为1result应该有一个从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]);
    }
  } 
});

StackBlitz Example

答案 4 :(得分:0)

这是将数组推入打字稿中的数组的最新更新方式。 您可以使用扩展运算符轻松扩展数组

array1: [...array1, ...array2]

这将扩展array1并将array2中的元素添加到array1中。

您可以在-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

中找到更多相关信息