2017-05-26 6 views
-2

Ich habe ein Objekt, das ein Ergebnis einer geparsten json ist:Das Finden der Array Schlüssel, die Element-ID angepasst

{ 
"AKH":{ 
    "name": "Amonkhet", 
    "code": "AKH", 
    "releaseDate": "2017-04-28", 
    "border": "black", 
    "block": "Amonkhet", 
    "type": "expansion" 
    "cards": [ 
    { 
    "artist": "Min Yum", 
    "cmc": 5, 
    "colorIdentity": [ 
    "W" 
    ], 
    "colors": [ 
    "White" 
    ], 
    "manaCost": "{3}{W}{W}", 
    "multiverseid": 426703, 
    "name": "Angel of Sanctions", 
    "number": "1", 
    "power": "3", 
    "rarity": "Mythic Rare", 
    "subtypes": [ 
    "Angel" 
    ], 
    "toughness": "4", 
    "type": "Creature — Angel", 
    "types": [ 
    "Creature" 
    ] 
}, 
    "SHM" : { 
    "name": "Shadowmoor", 
    "code": "SHM", 
    "magicCardsInfoCode": "shm", 
    "releaseDate": "2008-05-02", 
    "border": "black", 
    "type": "expansion", 
    "block": "Shadowmoor", 
    "cards": [ 
{ 
    "artist": "Kev Walker", 
    "colors": [ 
    "White" 
    ], 
    "manaCost": "{W}", 
    "name": "Apothecary Initiate", 
    "number": "1", 
    "power": "1", 
    "rarity": "Common", 
    "subtypes": [ 
    "Kithkin", 
    "Cleric" 
    ], 
    "toughness": "1", 
    "type": "Creature — Kithkin Cleric", 
    "types": [ 
    "Creature" 
    ] 
}, 

Beachten Sie die Taste, um den Code übereinstimmt ... das wird immer der Fall für dieses Szenario sein.

Ich mache Elemente aus dem Namen und Codes

setList += "<a href='#' onClick='setLinks(this.id)' id=" + setCode + ">" + setName + "</a> " + "<br>" 

und bin versucht nun, eine Funktion zu erstellen, die die ID übereinstimmt (setCode) mit dem Schlüssel in meinem Objekt.

jetzt habe ich eine Funktion, dass die Kartennamen finden tut und listet sie alle:

function cardPop(listings){ 
    var cards = listings.cards; 
    for (var i=0; i < cards.length; i++){ 
    var card = cards[i]; 
    cardNum = Object.keys(cards) 
    } 

    $.each(cards, function(cardNum, cardListing) { 
    cardName = cardListing.name 
    console.log(cardName) 
    }); 
}; 

in Wirklichkeit aber möchte Ich mag für diese Karte Bevölkerung nur um die Karten in der Liste zu geben, die Spiele Der Link hat geklickt.

function setLinks(clicked_id) 
    if clicked_id == ? 

Ich fuzzed mit einer Reihe von Dingen .. und bin genug ratlos. Ich habe Stackoverflow und das allmächtige Google gesurft, aber es fällt mir schwer, meine Frage zu formulieren, um die richtigen Ergebnisse zu erhalten. Manche Dinge bringen mich nahe an keine Zigarre. Jede Hilfe wird sehr geschätzt!

EDIT:

@gvmani .. Vielen Dank für die Hilfe! Hier ist, womit ich endete. Nicht das endgültige Produkt, aber für jetzt arbeiten!

$(document).ready(function(){ 
    $.getJSON('https://api.myjson.com/bins/s7and', function (data) { 
    json = data 
    set_codes = Object.keys(data); 
    for (var i=0; i < set_codes.length; i++){ 
    set = set_codes[i]; 
} 
$.each(data, function(set_codes, listings){ 
    setName = listings.name 
    setCode = listings.code 
    setPop(setCode, setName) 
}); 
}); 
}); 

//Set population 
function setPop(){ 
    var setList = ""; 
    setList += "<a href='#' onClick='setLinks(this.id)' id=" + setCode + ">" + setName + "</a> " + "<br>" 
$('.things').append(setList); 
}; 

// Function to Generate Card List 
function setLinks(clicked_id){ 
    $.each(json, function(setCode, setListing) { 
    $.each(setListing.cards,function(cardNum, cardListing){ 
    if(setListing.code === clicked_id){ 
    console.log(cardListing.name); 
} 
}); 
}); 

} 
+0

Ihr Code ist schwer zu sehen, korrigieren Sie bitte die Vertiefung. – borislemke

+0

Ich habe den Einzug korrigiert, aber die Syntax ist immer noch komplett aus. Könnten Sie die tatsächlichen Daten und den Quelltext kopieren + einfügen? –

+2

Dieser JSON ist in allen Ländern der Welt ungültig – quirimmo

Antwort

0

Beitrag aktualisiert gemäß Kommentar.

var data = { 
 
    \t "AKH": { 
 
    \t \t "name": "Amonkhet", 
 
    \t \t "code": "AKH", 
 
    \t \t "cards": [{ 
 
    \t \t \t "name": "1" 
 
    \t \t }, { 
 
    \t \t \t "name": "2" 
 
    \t \t }] 
 
    \t }, 
 
    \t "SHM": { 
 
    \t \t "name": "Shadowmoor", 
 
    \t \t "code": "SHM", 
 
    \t \t "cards": [{ 
 
    \t \t \t "name": "3" 
 
    \t \t }, { 
 
    \t \t \t "name": "4" 
 
    \t \t }] 
 
    \t } 
 
} 
 
    
 
$(document).ready(function(){ 
 
    
 
$.each(data, function(cardNum, cardListing) { 
 
     
 
    $("<a href='#' onClick='setLinks(\""+cardNum+"\")' id=" + cardListing.code + ">" + cardListing.name + "</a> <br>").appendTo("#links"); 
 
    
 
    }); 
 

 

 

 
}); 
 
    
 
function setLinks(code){ 
 
$("#cards").empty(); 
 
    $.each(data, function(cardNum, cardListing) { 
 
    $.each(cardListing.cards,function(ind,card){ 
 
    if(cardListing.code === code){ 
 
    
 
    $("<a href='#'>" + card.name + "</a> <br>").appendTo("#cards"); 
 
    } 
 
    }); 
 
    }); 
 

 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<body> 
 
<div id="links"> 
 

 
</div> 
 
<div id="cards"> 
 
</div> 
 
</body>

+0

Dies ist rückwärts. Obwohl ich es vielleicht rückgängig machen kann, weiß ich es zu schätzen. Was ich suche, ist es, eine Liste nicht von den Karten, sondern von den eingestellten Codes zu machen, und dann wird der gesetzte Code angeklickt, er füllt dann die Liste der Karten in diesem Satz auf. –

+0

@ A.MuSanKitty Beitrag aktualisiert – gvmani

+0

Vielen Dank! Ich habe die Frage mit dem, was mir eingefallen ist, aktualisiert! Ich schätze den Riesenschub in die richtige Richtung :) –

Verwandte Themen