javascript - 如何检查一个数组是否包含另一个数组的任何值
问题描述
我有一个对象数组,需要检查第二个数组的任何值是否包含在特定字段中。
我的数组称为鸡尾酒列表,我需要检查的字段称为“成分”。
第二个数组称为selectedOptions。
当第二个数组只有 1 个值时,以下代码可以完美运行。
例子
const selectedOptions = ["vodka"];
const selectedDrinks = cocktailList.filter(function (item, i) {
if (item.ingredients.toLowerCase().includes(selectedOptions)) {
return true;
} else false;
});
当我在selectedOptions中有超过 1 个值时会出现问题 我的目标是如果 item.ingredients 包含 selectedOptions 的任何值,则返回 TRUE。
如果我有以下情况:
const selectedOptions = ["vodka", "rum"];
只有当成分字段包含selectedOptions的所有值时,它才会返回 true
我已经按照其他人的建议尝试了以下解决方案
if (item.ingredients.toLowerCase().some((val) => selectedOptions.indexOf(val) !== -1))
但我遇到了一个错误
TypeError: item.ingredients.toLowerCase().some is not a function. (In 'item.ingredients.toLowerCase().some(function (i)
每个项目都是一个对象,其中包含包含此类字符串的“成分”字段
Object {
"alcoholic": "true",
"complete": false,
"country": "cuba",
"dairy_free": "",
"description": "Made without the traditional orange liqueur",
"difficulty": "",
"dosage": "1½ shot(s) Tequila, ½ shot(s) Lime Juice, ½ shot(s)",
"drinkId": "1103",
"equipment": "Shaker, Strainer",
"garnish": "",
"glass": "collins",
"ingredients": "Tequila, Lime Juice, Agave Nectar Juice",
}
解决方案
你可以这样做:
var selectedOptions = ["vodka"];
var cocktailList = [{ ingredients: "vodka, lemon, sugar" }];
var selectedDrinks = cocktailList.filter((cocktail, i) =>
selectedOptions.reduce(
(has, option) => has && cocktail.ingredients.includes(option),
true
)
);
推荐阅读
- eclipselink - EclipseLink 类和 xml 混合映射
- python - 使用 pyinstaller 编译时找不到 exe 文件
- mysql - 将 2 个计数查询合并为 1 个
- java - 如何模拟 UUID?
- r - 如何使用字符变量作为我的过滤器?
- reporting-services - 矩阵 SSRS 的方差变化百分比
- javascript - Bootstrap:动态表上的数据排序
- mongodb - Fedora 29 MongoDB Compass 安装分段错误核心转储
- c# - 如何在 C# 中将数学运算符作为参数?
- c# - 使用 asp-action 从页面调用控制器方法