Как отфильтровать массив объектов по свойству массива - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть массив рецептов, заполненный объектами. Объект выглядит так

var recipes = [
  {
    name: 'All-Purpose Rub for Meat',
    ingredients: [
      {
        name: 'white sugar',
        quantity: {
          number: 4,
          unit: 'tablespoon'
        },
      },
      {
        name: 'salt',
        quantity: {
          number: 4,
          unit: 'tablespoon'
        }
      },
      {
        name: 'paprika',
        quantity: {
          number: 1,
          unit: 'tablespoon'
        }
      },
      {
        name: 'mustard powder',
        quantity: {
          number: 2,
          unit: 'tablespoon'
        }
      },
      {
        name: 'ground black pepper',
        quantity: {
          number: .5,
          unit: 'teaspoon'
        }
      },
      {
        name: 'dried oregano',
        quantity: {
          number: 1,
          unit: 'pinch'
        }
      },
      {
        name: 'dried thyme',
        quantity: {
          number: 1,
          unit: 'pinch'
        }
      },
    ],
    servingSize: {
      quantity: 12,
      unit: 'servings'
    },
    // usedFor: [ribs, chicken, pork, fish, beef]
  },


  {
    name: 'Rosemary Garlic Rub',
    ingredients: [{
      name: 'ground black pepper',
      quantity: {number: 1, unit: 'tablespoon'}},
      {
      name: 'kosher salt',
      quantity: {number: 1, unit: 'tablespoon'}},
      {
      name: 'chopped fresh rosemary',
      quantity: {number: 3, unit: 'tablespoon'}},
      {
      name: 'dried rosemary',
      quantity: {number: 1, unit: 'tablespoon'}},
      {
      name: 'diced garlic',
      quantity: {number: 8, unit: 'cloves'}},
      {
      name: 'olive oil',
      quantity: {number: .333, unit: 'cup'}}            
        ],
    servingSize: {quantity: 4, unit: 'servings'}, 
    // usedFor: [chicken, pork] 
  },
]

Что я хочу сделать, это отфильтровать массив рецептов на основе введенной специи, так что это будет что-то вроде этого

filterRecipes ({имя: «молотый черный перец»});

Я пробовал

function filterRecipes(spice) {
 let filteredarray = recipes.filter((recipe) => {
    recipe.ingredients.includes(spice.name);
 });
 return filteredarray;
}

console.log(filterRecipes({name: 'kosher salt'}))

Функция filterRecipes затем возвращает массив всех рецептов, в которых содержится молотый черный перец ингредиента.

Любая помощь будет принята с благодарностью.

Похоже, мне нужно что-то похожее на его, но я не могу использовать некоторые из них, потому что мне нужно все Я не знаю, почему это пометить ниже как правильный ответ, но это не возвращает мне все продукты с ингредиентами

Фильтрация массива объектов путем поиска свойств вложенных объектов

Он должен возвращать массив рецептов только с объектами, у которых есть ингредиент, который был указан в качестве параметра

1 Ответ

0 голосов
/ 01 апреля 2019

includes() - неправильный выбор, попробуйте some() вместо функции filterRecipes:

function filterRecipes(recipes, ingredient) {
  return recipes.filter(({ ingredients }) => {
    return ingredients.some(({ name }) => name === ingredient);
  });
}

... и затем назовите его именем ингредиента, а не объектом:

filterRecipes(recipes, 'kosher salt');

Подробнее о .some() вы можете узнать на MDN

...