2017-05-04 2 views
2

Ich habe schon seit einiger Zeit versucht, in einem Array zu suchen, ich habe mir alle anderen Fragen angesehen, die sogar meine ähneln und nichts funktioniert, also bitte ich um Hilfe Sie können nun geben ..Suche in einem Array in Javascript

I mit komplexerer Innen als ein einfaches String-Array ein Array haben

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"} }, 
]; 

Zwei Elemente aufgenommen werden (durch den Benutzer), die neuen Elemente erstellen kombiniert werden. Ich würde gerne die Elemente nach möglichen Kombinationen durchforsten. Im Idealfall würde ich Array.prototype.find verwenden, obwohl ich nicht herausfinden kann, wie man polymills richtig verwendet, und ich unsicher bin, wenn ich es richtig schreibe, so funktioniert es weiterhin nicht

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

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

Board ist die ID Div, wo die Elementkarten einmal geklickt werden. Ich habe auch versucht, eine Schleife

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

Ich versuche, eine Frage zu stellen, die nicht zu lang ist, aber ich bin sicher, es gibt viel mehr über meinen Code i anzupassen, um dies zu tun müssen. Ich denke, ich frage nur, ob da etwas offensichtlich ist, an das ich denken könnte, dass ich daran arbeiten könnte. Ich habe die meisten Antworten auf dieser Seite zu ähnlichen Problemen geschaut, aber alles läuft schrecklich schlecht ab, so dass jede andere Unterstützung sehr geschätzt würde.

+0

Das HTML, das zu diesem Code gehört, würde (hoffentlich) die Frage beantwortbar machen. – enhzflep

+0

Wo benutzt du 'findElement'? und 'Suche' Definition –

Antwort

2

Ich habe ein Array mit einem komplexeren Innenleben als ein einfaches String-Array

Ja, aber warum? Lassen Sie sich von den zusätzlichen Schichten zu befreien und das ist trivial

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] => "Dampf"

+0

diese Lösung vereinfacht alles andere so sehr, danke – mcftdhorappusswrtvo

1

Wenn Sie Ihre Daten-Struktur behalten möchten, können Sie durch sie filtern wie folgt aus:

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

die erste Zeile filtert alle Spiele, und das SECON ordnet sie dem tatsächlichen Spiel-string (Elementname) über. Die find() Sie sprechen von gibt nur die erste Wert, der übereinstimmt, und ich denke, Sie wollen alle, so dass die filter() Methode wäre.

Verwandte Themen