2017-06-20 59 views
0

目前,我有以下结构:比较输入到阵列的JavaScript

"name" : 'Invisibility', 
    "ingredients" : { 
     "CatTail" : 2, 
     "Arsenic" : 1, 
     "Newt" : 2, 
    }, 
    "name" : "Super Strength", 
    "ingredients" : { 
     "Plutonium" : 2, 
     "CatPee" : 5, 
     "Rock" : 10 
    } 

我正在输入如下面的方式数组:

input = { 
    firstIngredient : firstQuantity, 
    secondIngredient : secondQuantity, 
    thirdIngredient : thirdQuantity, 
} 

的想法是,我有一个列表的成分和数量作为输入,现在我想看看提交的值是否与上述成分之一相符。

我正确地认为我应该创建一个函数传递两个项目并对它们进行for循环,并按照此答案中的描述比较键? Comparing Arrays of Objects in JavaScript

谢谢!

+0

第一个“东西”应该是什么?它既不是一个数组,也不是一个对象,也不是一个对象数组......'input'是一个对象而不是一个数组。 – Andreas

+0

你的第一个结构看起来不合适;您不能拥有多个具有相同名称的密钥。 –

+0

嗯,好吧,我把它插入到下面的mongo集合中。有没有更好的结构方式? '\t db.collection( '食谱')插入({ \t \t “姓名”: '隐形', \t \t “成分”:{ \t \t \t “香蒲”:2, \t \t \t “砷” :1, \t \t \t “蝾螈” \t:2, \t \t}, \t \t “名”: “超级力量”, \t \t“荷兰国际集团redients”:{ \t \t \t “钚”:2, \t \t \t “CatPee”:5, \t \t \t “摇滚”:10 \t \t} \t});' – roo

回答

0

无论您打算如何进行的,这里的input比较配方代码:

var recipes = [{ 
 
    "name": 'Invisibility', 
 
    "ingredients": { 
 
    "CatTail": 2, 
 
    "Arsenic": 1, 
 
    "Newt": 2, 
 
    } 
 
}, { 
 
    "name": "Super Strength", 
 
    "ingredients": { 
 
    "Plutonium": 2, 
 
    "CatPee": 5, 
 
    "Rock": 10 
 
    } 
 
}]; 
 

 
var input = { 
 
    "CatPee": 5, 
 
    "Rock": 10, 
 
    "Plutonium": 2, 
 
}; 
 

 
function matches(a, b) { 
 
    var match = true; 
 
    Object.keys(a).forEach(ingredient => { 
 
    if (a[ingredient] !== b[ingredient]) match = false; 
 
    }); 
 
    return match; 
 
} 
 

 
recipes.forEach(recipe => { 
 
    if (matches(input, recipe.ingredients)) console.log("match found: " + recipe.name); 
 
});

在MongoDB中查询我想你想补充的情况下,某种调用比较函数的自定义过滤器。

+0

啊这是有帮助的!结构现在更有意义:) - 谢谢! – roo