Как перебирать массив объектов, перебирать каждый объект и помещать каждый объект в отдельные массивы для циклов ngFor в угловых - PullRequest
0 голосов
/ 05 июня 2019

Я работаю над проектом Angular 7 и имею дело с 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, и я не знаю ожидаемых результатов поиска все время результаты поиска, показывающие массив объектов

Ответы [ 2 ]

0 голосов
/ 05 июня 2019
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

    }
0 голосов
/ 05 июня 2019

Просто нажимай obj, а не y [obj]. Возможно, я не понимаю задачу. И использовать вместо in. Или вы хотите получить некоторые подстроки ингредиентов от объекта?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...