2017-12-06 3 views
0

Hallo, ich versuche, meine eigene Pokédex-Website zu machen, aber ich bin nicht sehr gut in Datenbanken, SQL, PHP und so, ich mache es in JavaScript, JSON-Stil . Dabei stieß ich auf ein Problem: Ich wollte gen1.gps.Route_1.Exits.South an gen1.gps.Pallet_Town.Title verweisen, aber ich wusste nicht wie. Natürlich habe ich zuerst eine Weile im Internet gesucht, um eine Lösung zu finden, aber ich habe es im Kontext nicht verstanden. Anruf childs des Elternobjekts Geschwister

var gen1 = { 
    'gps': { 
    'Route_1': { 
     'Title': 'Route 1', 
     'Exits': { 
     'North': 0, 
     'South': // pallet town link here 
     }, 
    }, 
    'Pallet_Town': { 
     'Title': 'Pallet Town', 
     'Exits': { 
     'North': /* route 1 here */, 
     'South': 0 
     } 
    } 
    } 
} 

Ich erwarte, dass das gen1.gps.Route_1.Exits.South Objekt aufrufen zu können Title Objekt von gen1.gps.Pallet_Town zu erhalten. Ich habe noch nichts debugged, also habe ich keine Ahnung, was meine Fehler sind oder sein werden.
Ich hoffe, dass jemand mir helfen kann, indem ich eine nützliche Antwort poste.

+0

Sie können nicht. Sobald Sie 'gen1' erstellt haben, können Sie die Referenzen einrichten, aber Sie können es nicht" während "erstellen. –

+0

und wenn ich ein Funktionsobjekt machen würde? –

+0

Das hängt davon ab. Sie können nur einen Verweis auf ein vorhandenes Objekt festlegen. Wenn deine Funktion das macht, wird es funktionieren. Wenn es versucht, dasselbe wie Ihr Code oben zu tun, wird es nicht. –

Antwort

0

Benötigen Sie eine Art von ID-System zu implementieren. MySQL kümmert sich darum für Sie, aber wie Sie sagten, Sie wollen nicht neue Sprachen lernen müssen, nur um etwas zum Leben erweckt zu sehen.

Ich fügte den Routen IDs hinzu und schrieb dann eine Funktion, um Routen anhand ihrer IDs zu finden. Das untere Bit des Codes (Object.size()) ist, um die Gesamtzahl der Routen in Ihrem gps Objekt zu erhalten. (Das gleiche wie array.length)

var gen1 = { 
    'gps': { 
    'Route_1': { 
     'Id': 1, 
     'Title': 'Route 1', 
     'Exits': { 
     'North': 0, 
     'South': 2 
     }, 
    }, 
    'Pallet_Town': { 
     'Id': 2, 
     'Title': 'Pallet Town', 
     'Exits': { 
     'North': 1, 
     'South': 0 
     } 
    } 
    } 
}; 

function getRoute (id) 
{ 
    for (var i = 0; i < gen1.gps.size(); i++) 
    { 
     if (gen1.gps[i].id == id) 
      return gen1.gps[i]; 
    } 

    return false; 
} 

Object.size = function (obj) 
{ 
    var size = 0, key; 

    for (key in obj) 
     if (obj.hasOwnProperty (key)) size++; 

    return size; 
}; 
0

Sie können eine Menge Arbeit sparen, wenn Sie Ihr Objekt dynamisch erstellen, wie folgt aus:

var gen1 = { 
 
    gps: {} 
 
}; 
 

 
function checkPlace(a) { 
 
    if (!gen1.gps[a]) gen1.gps[a] = {}; 
 
    if (!gen1.gps[a].Title) gen1.gps[a].Title = a.split("_").join(" "); 
 
    if (!gen1.gps[a].Exits) gen1.gps[a].Exits = {}; 
 
} 
 

 
function connect(a, b, dir) { 
 
    checkPlace(a); 
 
    checkPlace(b); 
 
    if (dir == "ns") { 
 
    gen1.gps[a].Exits.South = gen1.gps[b]; 
 
    gen1.gps[b].Exits.North = gen1.gps[a]; 
 
    } 
 
    if (dir == "we") { 
 
    gen1.gps[a].Exits.East = gen1.gps[b]; 
 
    gen1.gps[b].Exits.West = gen1.gps[a]; 
 
    } 
 
} 
 

 
connect("Route_1", "Pallet_Town", "ns"); 
 

 
console.log(gen1.gps.Route_1.Exits.South.Title); 
 
console.log(gen1.gps);

Verwandte Themen