【问题标题】:How to filter array of objects by an array property如何通过数组属性过滤对象数组
【发布时间】:2019-08-22 01:07:45
【问题描述】:

我有一个用对象填充的食谱数组。一个对象看起来像这样

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({name: '黑胡椒粉'});

我试过了

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

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

filterRecipes 函数将返回一个包含“黑胡椒粉”成分的所有食谱的数组。

任何帮助将不胜感激。

看起来我需要类似于他的东西,但我不能使用一些,因为我需要全部我不知道为什么它将以下标记为正确答案,但这并没有给我全部有成分的物品

Filtering array of objects by searching nested object properties

它应该返回一个食谱数组,其中仅包含具有作为参数放入的成分的对象

【问题讨论】:

标签: javascript arrays filtering javascript-objects


【解决方案1】:

includes() 在这里不是正确的选择,请尝试使用some() 代替您的filterRecipes 功能:

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

...然后用成分名称而不是对象来调用它:

filterRecipes(recipes, 'kosher salt');

您可以了解更多关于.some()on MDN的信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-29
    • 2020-04-21
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    相关资源
    最近更新 更多