Angular2,Ionic2:如何在typescript中访问另一个对象数组中的对象数组?

时间:2017-04-05 12:32:53

标签: angular object typescript ionic2 arrayofarrays

我对在angular2中使用数组的概念完全陌生。我的JSON数据来自后端,我将其存储在一个名为“arr”的数组中。但我想访问一个存在于每个“arr”对象中的数组,即“arr”中的每个对象都有一个数组,其中包含一些元素。我想在我的.ts文件中访问该数组而不是HTML文件。我需要在.ts文件中对它进行一些修改,所以我想知道如何为它创建一个管道。

我读到我们需要使用pipes.But我不明白我该如何使用管道。 如果你可以在图片中看到有一个主数组,它有3个对象,并且3个对象中的每一个都有一个名为categories的数组,它们也有对象。我想访问主数组中存在的所有3个对象的类别内的字段“类别”。有人可以帮我做吗?

This is how my data looks

2 个答案:

答案 0 :(得分:1)

如果是html

<div *ngFor="let item of arr">
 {{item.aliasname}}
 <div *ngFor="let category of item.categories">
    {{category.name}}
 </div>
</div>

在类型脚本中,您可以使用foreach循环

arr.forEach(element => {
    element.forEach(category => {
       console.log(category.name);
       // Do whatever you want
       // You can access any field like that : category.yourField
    });
});

An other way to foreach in Angular2

答案 1 :(得分:1)

此处不需要管道,管道将用于在模板中实际显示数据,例如,如果您需要迭代不能与*ngFor一起使用的对象键。但是因为你想操纵组件中的数据....

您需要两个forEaches来覆盖不同对象中的每个类别。您需要在收到数据后通过回调(订阅)执行此操作,此处还有更多信息:How do I return the response from an Observable/http/async call in angular2?

我建议您在服务中执行http请求,并订阅组件中的数据,因此在组件中,调用该服务方法并订阅响应,然后使用forEach:

ngOnInit() {
  this.service.getData()
    .subscribe(data => {
      this.searchResults = data;
      // call method or manipulate data here since response has been received
      this.manipulateData();
    });
}

manipulateData() {
    this.searchResults.forEach((x:any)=> { // iterate outer array
      x.categories.forEach((y:any) => { // iterate the categories of each object
        console.log(y.name) // ... or whatever properties you have
        // manipulate your data
      })
    })
}

DEMO