2017-05-04 47 views
2

我一直在嘗試一段時間來搜索一個數組,我已經看過所有其他問題,甚至有點像我的東西,沒有任何工作,所以我要求任何幫助你現在可以給..在javascript中的數組內搜索

我有一個更復雜的內部數組不是一個簡單的字符串數組

var elementDefns = [ 
    {"element":"water", "combos": {"air":"steam", "earth":"sand"} }, 
    {"element":"fire", "combos": {"earth":"lava", "air":"energy"} }, 
    {"element":"air", "combos": {"water":"steam", "earth":"dust"} }, 
    {"element":"earth", "combos": {"water":"swamp", "fire":"lava"} }, 
]; 

兩個元素挑選(由用戶),這相結合,建立新的元素。我想通過元素搜索可以製作的任何組合。理想情況下,我想要使用Array.prototype.find,雖然我不知道如何正確使用polyfills,但我不確定是否正確寫入,因此它仍然不能正常工作。

var elementOne = $("#board img:first-child").attr('id'); 
    var elementTwo = $("#board img:last-child").attr('id'); 

    function findElement(element) { 
     return elementDefns.element === elementOne; 
    } 

板是元素卡片一旦點擊就進入的id div。我也嘗試了循環

for (var i=0, tot=elementDefns.length; i < tot; i++) { 
      var indexHelp = elementDefns[i].element; 
      var find = indexHelp.search(elementOne); 
      console.log(find); 
     } 

我想張貼問題,這不是太長,但我敢肯定有很多更多關於我的代碼,我需要在爲了做到這一點調整。我想我只是問是否有什麼明顯的你認爲我可以工作。我看了大部分的答案在本網站類似的問題,但它的一切都只是去可怕的錯誤,因此任何其他支持將不勝感激..

+0

與此代碼一起使用的HTML將(希望)使問題可以回答。 – enhzflep

+0

你在哪裏使用'findElement'?和'搜索'定義 –

回答

2

我有一個更復雜的內部不是一個簡單的數組字符串數組

是的,但是爲什麼?擺脫額外的層,這是微不足道的

var e1 = "water"; 
var e2 = "air"; 

var elementDefns = { 
    "water": {"combos": {"air":"steam", "earth":"sand"} }, 
    "fire": {"combos": {"earth":"lava", "air":"energy"} }, 
    "air": {"combos": {"water":"steam", "earth":"dust"} }, 
    "earth": {"combos": {"water":"swamp", "fire":"lava"} }, 
}; 

elementDefns [E1] .combos [E2] =>「蒸」

+0

這個解決方案簡化了其他的一切,謝謝 – mcftdhorappusswrtvo

1

如果你想保持你的數據結構,你可以通過它進行過濾像這樣:

var matches = elementDefns 
     .filter(e => e.element == first && e.combos[second] !== null) 
     .map(e => e.combos[second]); 

第一行過濾掉所有匹配,並且secon將它映射到實際的匹配字符串(元素名稱)。 find()你說的只是返回第一個值相匹配,我想你想全部,所以這將是filter()方法。