【发布时间】:2020-09-21 13:27:37
【问题描述】:
我有一个对象数组,需要检查第二个数组的任何值是否包含在特定字段中。
我的数组名为 cocktailList,我需要检查的字段名为“ingredients”。
第二个数组称为selectedOptions。
当第二个数组只有 1 个值时,以下代码可以完美运行。
例子
const selectedOptions = ["vodka"];
const selectedDrinks = cocktailList.filter(function (item, i) {
if (item.ingredients.toLowerCase().includes(selectedOptions)) {
return true;
} else false;
});
当我在 selectedOptions 中有多个值时会出现问题 如果 item.ingredients 包含 selectedOptions 的任何值,我的目标是返回 TRUE。
如果我有以下情况:
const selectedOptions = ["vodka", "rum"];
只有在 ingredients 字段包含 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",
}
【问题讨论】:
-
似乎问题在 JavaScript 中 - 请标记问题。
-
请告诉我们
cocktailList的值。看起来在原始代码中,item.ingredients是一个字符串,但在另一个示例中它不是? -
@Bergi 我已经更新了我的问题,并在底部包含了一个对象示例。成分字段确实是一个字符串。
-
啊。你会想要使用
selectedOptions.some(…),而不是ingredients.….some(…)。 -
@Bergi 这样你的意思是
const selectedDrinks = cocktailList.filter(function (item, i) { if (selectedOptions.some(item.ingredients.toLowerCase())) { return true; } else false; });
标签: javascript arrays prototype array.prototype.map