我如何从另一个对象获取数据?

时间:2018-04-17 06:01:31

标签: javascript angular

Plunker 我有两种结构 - 配料和食谱

[{
    "id":"1",
    "name": "Cucumber"
 },
 ..
]

 [{
     "id":"1",
     "name": "Salad1",
     "recipein":[1, 3, 5]
  }, {
      ...
  }
 ]

我希望通过按钮显示每种沙拉中的成分名称。 我过滤了对象以获取对象的ID,然后我尝试获取一系列成分

getSalad(param:number) {
    this.saladId = this.recipe.filter(rec => {
        return rec.id.includes(param);
    })  

    this.getNameOfIngredients(this.saladId)
 }

 getNameOfIngredients(saladArray:any) {
     var ingredientsId = saladArray.map(function(num) {
     return num.recipein;
 });

我得到数组[1,2,4]现在我想要显示来自this.ingredients的所有成分的名称。  我怎样才能做到这一点?

Plunker

3 个答案:

答案 0 :(得分:4)

我在你的plunker做了更新。我认为你在寻找什么:Plunker

  getSalad(param:number) {

   this.saladId = this.recipe.filter(rec => +rec.id === param )[0];
    if(!this.saladId){
      this.currentSalad = "Salad not found";
      return;
    }
   this.currentSalad = this.getNameOfIngredients(this.saladId)

  }

  getNameOfIngredients(saladArray:any) {
    return this.ingredients.filter( ing => {
      return saladArray.recipein.indexOf(+ing.id) !== -1;
  });

答案 1 :(得分:0)

let _ingredients = []
this.ingredients.foreach((ingr)=>{
    if(this.ingreIDArry.indexof(ingr.id) > -1){
        _ingredients.push(ingr.name)
    }
})
return _ingredients

这就是你想要的吗?

答案 2 :(得分:0)

如果你可以展平数组,我们进行查找会非常简单。

这是你能做的。

const salads = [{
  "id": "1",
  "name": "Salad1",
  "recipein": [1, 3, 5]
}];

const ingredients = [{
    "id": "1",
    "name": "Cucumber"
  },
  {
    "id": "2",
    "name": "Cucumber2"
  },
  {
    "id": "3",
    "name": "Cucumber3"
  },
  {
    "id": "4",
    "name": "Cucumber4"
  },
  {
    "id": "5",
    "name": "Cucumber5"
  }
];

const flattenIngredients = (() => {
  const output = {};
  ingredients.forEach((ingredient) => {
    output[ingredient.id] = ingredient;
  });
  return output;
})();

const getSalad = (saladId) => {
  const filteredSalad = salads.filter((salad) => {
    return saladId == salad.id;
  });
  if (filteredSalad.length > 0) {
    const salad = filteredSalad[0];
    return salad.recipein.map((receip) => flattenIngredients[receip].name);
  }
}

console.log(getSalad(1));