检查数组的元素是否包含在另一个数组的元素中

时间:2020-10-15 19:48:28

标签: javascript arrays multidimensional-array string-matching

我正在尝试匹配2个数组,并检查第一个数组的所有元素是否包含在第二个数组中。

我的第一个数组如下所示,其中包含一系列选定的成分

selectedOptions:  Array [
  "egg",
  "spaghetti",
  "cream",
]

第二个数组包含一道菜的食谱,看起来像这样

"ingredients": Array [
    "spaghetti",
    "raw egg",
    "double cream",
    "tomato sauce",
]

现在,我有一个遍历对象数组的函数,每个对象都包含“成分”数组

这是代码

const availableRecipes = recipeList.filter(function (item, i) {
      if (
        selectedOptions.some((option) =>
          item.ingredients.includes(option)          
        )        
      ) {
        return true;
      } else false;
    });

此功能可以正常工作,即可以遍历我的食谱数组并检查每个项目是否包含“鸡蛋”和“意大利面条”。

问题

仅当配方完全包含整个单词(即“鸡蛋”或“奶油”)时,该函数才返回True。 在我的示例配方中,它不包含“鸡蛋”而是“生鸡蛋”和“双重奶油”而不是“奶油”,因此将返回False。

我认为问题在于在item.ingredients.includes(option)

中使用 includes

反正我可以进行部分比赛吗?

2 个答案:

答案 0 :(得分:1)

您将需要另一个.some,以遍历每个字符串以查看是否包含子字符串:

const availableRecipes = recipeList.filter((item) => {
  return selectedOptions.some(
    option => item.ingredients.some(
      ingredient => ingredient.includes(option)          
    )
  );
});

答案 1 :(得分:0)

为了保持一致性,您还需要在最后的return false;之后else,而不只是说明else false;