2015-04-05 64 views
0

我一直在試圖在用戶選擇的答案和對象屬性名稱之間「關聯」,以便如果兩個匹配,那麼它將顯示內部的內容。JavaScript數據庫關聯

我的程序是一個配方查找器,它可以回顯用戶挑選的配料組成的配方。 我的代碼目前看起來像:

//屬性是成分和價值是含有這些成分的食譜。地圖被自動生成

``var map = { 
"pork" : [recipe1, recipe2, ...], 
    "beef" : [], 
    "chicken" :[], 
} 

//這獲取用戶拾取從DOM

var cucumber = specificVegetable[7]; 
var lemon = specificFruits[0]; 

//那麼這個代碼發現配方的交點(配方使用多於一個成分)

function intersect(array1, array2) 
{ 
    return array1.filter(function(n) { 
     return array2.indexOf(n) != -1 
    }); 
} 

var recipiesWithLemon = map["lemon"]; **// makes the lemon object is map** 

var recipiesWithCucumber = map["cucumber"]; **// makes the cucumber object in map** 

//他再次就是我堅持

function check(){ 

    var both = intersect(recipiesWithLemon, recipiesWithCucumber); 
    if (cucumber.checked && lemon.checked){ 
     for (var stuff in map){ 
      if(stuff="cucumber" && stuff="lemon"){ 
       return both; 
      } 
     } 
    } 


} 
check(); 

所以基本上我試圖做的是我做了我相交,然後,如果用戶選擇是檸檬和黃瓜然後查看地圖對象的屬性。如果該屬性的名稱等於確切的字符串,則返回兩者。這是計劃,但代碼不起作用,我不知道如何解決它。

我的計劃是爲每個可能的結果編寫代碼,用戶可能會這樣做,所以我需要找到用戶選擇與存儲配方的地圖之間的關聯。我意識到這不是最有效的方法,但我很難以另一種方式做到這一點。

感謝您的幫助。

回答

0

我使用開源項目jinqJs來簡化過程。 我還將您的地圖更改爲JSON對象數組。如果你必須讓地圖對象不是數組,請告訴我。我將更改示例代碼。

var map = [ 
 
    {"pork" : ['recipe1', 'recipe2']}, 
 
    {"beef" : ['recipe3', 'recipe4']}, 
 
    {"peach" :['recipe5', 'recipe6']}, 
 
    {"carrot" :['recipe7', 'recipe8']} 
 
]; 
 

 
var selectedFruit = 'peach'; 
 
var selectedVeggie = 'carrot'; 
 

 
var selections = [selectedFruit, selectedVeggie]; 
 

 
var result = jinqJs().from(map).where(function(row){ 
 
    for(var f in row) { 
 
     if (selections.indexOf(f) > -1) 
 
     return true; 
 
    } 
 
    
 
    return false; 
 
}).select(); 
 

 
document.body.innerHTML += '<pre>' + JSON.stringify(result, null, 2) + '</pre><br><br>';
<script src="https://rawgit.com/fordth/jinqJs/master/jinqjs.js"></script>

+0

謝謝您的回答,但我真的只能理解JavaScript – Kani 2015-04-05 20:32:44