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

Я делаю простое приложение, написанное на Angular7, которое получает информацию о продуктах (например, «яблочно-оранжевая клубника») и отображает рецепты, в которых все продукты являются ингредиентом.Все необходимое, например рецепты, ингредиенты и т. Д., Сохраняется в файле JSON.Это работает только тогда, когда у меня есть один продукт в качестве входа.Дело в том, что я хочу перебрать все ингредиенты на входе и отобразить рецепты, какие ингредиенты есть у всех продуктов.

Вот как выглядит объект файла JSON:

{
      "id": 1,
      "name": "some name",
      "ingredients": "some ingredients",
      "recipe": "some recipe"
    }

Вот так я получаю входные данные как объект, а затем разделяю их, чтобы получить каждый ингредиент:

 this.pattern = this.searchForm.value;
 this.patternObj = this.pattern.name.split(" ");

Вот как я фильтрую и собираю элементы, которые содержат определенный ингредиент:

this.result = res.filter(v => v.ingredients.indexOf(this.patternObj) > -1); 

Я пытался использовать шаблонObj, но в этом случае он отображает только рецепты для последнего продукта.объекта.

1 Ответ

0 голосов
/ 24 марта 2019

Вместо этого следует использовать функцию some, чтобы проверить наличие хотя бы одного элемента, и функцию includes, чтобы проверить, существует ли один элемент в целевом массиве.

this.result = res.filter(v => v.ingredients.some(ing => this.patternObj.includes(ing)));
...