我在名为 myBar 的数组中具有以下成分列表。成分包含在属性“名称”中
myBar: Array [
bar {
"category": "spirits",
"id": "1",
"ingredientId": "2003",
"name": "vodka",
},
bar {
"category": "juice",
"id": "2",
"ingredientId": "2017",
"name": "orange juice",
},
bar {
"category": "juice",
"id": "3",
"ingredientId": "2020",
"name": "lemon juice",
},
bar {
"category": "juice",
"id": "4",
"ingredientId": "2027",
"name": "Pineapple Juice",
},
bar {
"category": "juice",
"id": "5",
"ingredientId": "2018",
"name": "apple Juice",
},
bar {
"category": "juice",
"id": "6",
"ingredientId": "2025",
"name": "Lime Juice",
},
bar {
"category": "spirits",
"id": "7",
"ingredientId": "2001",
"name": "gin",
},
bar {
"category": "spirits",
"id": "8",
"ingredientId": "2005",
"name": "whiskey",
},
bar {
"category": "spirits",
"id": "9",
"ingredientId": "2002",
"name": "rum",
},
]
我还有另一个名为 cocktailList 的数组,其中包含鸡尾酒配方列表。在这里,成分包含在“成分”字段中。
cocktailList: Array [
Object {
"alcoholic": "true",
"drinkId": "1101",
"ingredients": " gin, lime syrup, lime",
},
Object {
"alcoholic": "true",
"drinkId": "1102",
"ingredients": "vodka, orange juice",
},
Object {
"alcoholic": "true",
"drinkId": "1103",
"ingredients": "rum, coke",
},
Object {
"alcoholic": "true",
"drinkId": "1104",
"ingredients": "sweet vermouth, campari, prosecco",
},
Object {
"alcoholic": "true",
"drinkId": "1105",
"ingredients": "Gin, Olive Juice, Olives, Dry vermouth",
},
Object {
"alcoholic": "true",
"drinkId": "1106",
"ingredients": " Vodka, Triple Sec, Lime Juice",
},
Object {
"alcoholic": "true",
"drinkId": "1107",
"ingredients": " vodka, Raspberry Liqueur, Pineapple Juice",
}
]
我正在尝试根据配料的匹配程度来调制哪些鸡尾酒。 想法是迭代每个食谱(在 cocktailList 中),并检查所有成分是否也在我的 myBar 中的成分列表中。
例如,“ drinkId”:“ 1102”应返回true,因为我在 myBar 中拥有所有成分(伏特加和橙汁) “ drinkId”:“ 1101”应该返回false,因为我既没有石灰浆也没有石灰。
答案 0 :(得分:1)
从第一个数组中创建一个成分名称数组,以便您可以在直接数组中快速搜索成分。
// arr1 is your list of ingredients in your bar.
var arrName = [];
arr1.forEach(element => arrName.push(element.name));
console.log(arrName);
Output:
["vodka", "orange juice", "lemon juice", "Pineapple Juice", "apple Juice", "Lime Juice", "gin", "whiskey", "rum"]
现在循环遍历cocktailList
,并在arrName
中搜索每种成分。如果匹配元素的数量等于鸡尾酒中成分的数量,则为匹配。
var finalArr = arr2.filter(function(obj){
var arrIngredient = obj.ingredients.split(',');
var intMatch = 0;
arrIngredient.forEach(element => arrName.indexOf(element.trim()) >= 0 ? intMatch++ : '');
return arrIngredient.length == intMatch;
});
console.log(finalArr);
Output:
[
{
alcoholic: "true"
drinkId: "1102"
ingredients: "vodka, orange juice"
}
]