如何遍历对象数组,遍历每个对象并将每个对象推入单独的数组以进行ngFor循环

时间:2019-06-05 19:50:29

标签: arrays angular angular7

我正在开发一个Angular 7项目,并且正在处理一个api,该api在搜索时返回一个(配方)对象数组,我想从每个对象中获取所有成分,因此我可以遍历它们,仅获取我想要,因为每个(配方)对象都彼此不同

我尝试遍历对象的初始数组,然后遍历每个单独的对象,并仅获取每个(配方)对象可用的成分,但是我不知道如何将它们推入单独的数组。每当我推送时,所有对象的所有成分都会被推送到一个数组中。

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { RecipesService } from 'src/app/services/recipes.service';

@Component({
selector: 'app-search',
templateUrl: './search.component.html',
styleUrls: ['./search.component.scss']
})
export class SearchComponent implements OnInit {
s: string;
ingArray: any[] = []
measurementsArr = []
nothingFound = false;
itemsFound = false;
searchedData: any[] = [];
searchresults: number;
constructor(private route: ActivatedRoute, private service:RecipesService) { }

ngOnInit() {
this.route.queryParams.subscribe(params=>{
  this.s = params.s;
  console.log(this.s)
})
this.searchDB()
}

searchDB(){
this.service.searchRecipeDB(this.s).subscribe((res:any)=>{
  if(res.meals === null){
    this.nothingFound = true;
  }else{
    this.searchedData = res.meals
    console.log(this.searchedData)
    this.itemsFound = true;
    this.searchresults=this.searchedData.length;
    let resultsarray = this.searchedData
    for(let y of resultsarray){ 
      for(let obj in y){ 
        if(obj.includes('strIngredient')){ 
          if(y[obj]!=null){ 
            if(y[obj].length > 0){ 
              this.ingArray.push(y[obj])  
              console.log(this.ingArray) 
            }
          }
        }
      }
    }
   }
  })


}

}

我已经能够遍历并从每个(配方)对象中获取每种成分,但无法将它们推入单独的数组而不必定义多个数组。有没有一种方法可以将(配方)对象中的所有成分推入单独的数组,而无需添加其他(配方)对象中的其他成分?我不想定义多个数组,因为我正在使用api,而且我一直都不知道预期的搜索结果search results showing an array of objects

3 个答案:

答案 0 :(得分:0)

只推obj,而不是y [obj]。可能我不了解任务。并使用代替in。或者您想从对象中获取一些成分子字符串?

答案 1 :(得分:0)

for(let y of resultsarray){
     ingrSub: Array<any> = new Array();
      for(let obj in y){ 
        if(obj.includes('strIngredient')){ 
          if(y[obj]!=null){ 
            if(y[obj].length > 0){ 
              ingrSub.push(y[obj])  
              console.log(this.ingArray) 
            }
          }
        }
      }
    if(ingrSub.length > 0)
          this.ingArray.push(ingrSub)
    else
       ingrSub = null;//just to be sure that we do not leak the memory if engine thinks the oposite in some case

    }

答案 2 :(得分:0)

    this.array_a = [] <- this add your array

this.array_b.forEach(array_b_item => {
  array_b_item.new_variable = JSON.parse(
    JSON.stringify(this.array_a)
  ); 
});

you can add values indivualy to array_b