Struppi: Assoziative Arrays und so

Beitrag lesen

hi

bin jetzt also angefangen das ganze neu aufzuziehen und mich mit assoziativen arrays auseinanderzustzen.

Ich sehe schon, da habe ich was angezettelt ....

und da ergeben sich für mich schon ein paar verständniss probleme.

wenn ich ein mehr dimensionales Array erzeuge, müssen dann alle werte alle dimensionen haben? klingt doof und unverständlich, drum hier ein beispiel:

Nein, wenn ich dich richtig verstehe.

var CHARACTER_WERTE                   = new Array("RASSE","STR");
    CHARACTER_WERTE["RASSE"]          = "Mensch";
    CHARACTER_WERTE["STR"]            = new Array("WUERFEL","PUNKTE");
    CHARACTER_WERTE["STR"]["WUERFEL"] = 3;
    CHARACTER_WERTE["STR"]["PUNKTE"]  = 6;

»

ich sowas möglich?
CHARACTER_WERTE["RASSE"] hätte ja hier nur eine dimension, CHARACTER_WERTE["STR"] hingegen 2.

Klar, kein Problem. aber bei so komplexen Datenstrukturen, solltest du das ganze mit Strukturen lösen:

In etwa so:

function Rasse(name, wuerfel, punkte)
{
this.name = name;
this.wuerfel = wuerfel;
this.punkte = punkte;
}

var mensch = new Rasse('mensch', 3, null);
var elf = new rasse('Elf', nul, 6);

usw.

Du kannst diese Variabeln dann auch Funktionen übergeben und auf deren Eigenschaften zugreifen.

Du kanst natürlich auch ein Assoziatives Array basteln:

var spieler = new Object(); // besser als Array, da ein AA kein Array ist

spieler['mensch'] = new Rasse('mensch',....);

Allerdings habe ich gelesen, das ich ein assoziatives Arrays wie ich es oben erstellt habe so nicht ansprechen kann (oder ich habe es missverstanden :)).
Wie kann ich diese Problematik lösen? Oder geht es nur so wie ich es oben schon angeführt habe?

AA Arrays sind keine Arrays eigentlich. Es gibt keine Eigenschaft length du kannst alle Eigenschaften mit for( x in y) durchgehen:

var mensch = new Rasse('mensch', 3, null);

for(var eigenschaft in mensch) alert(eigenschaft + '=' + mensch[eigenschaft]);

Ich hoffe mal ich hab da nicht zuviel losgetreten und du hast genug Zeit ;-)

Struppi.