我正在尝试匹配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)
反正我可以进行部分比赛吗?
答案 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;