Javascript/Prototype mit assoziativen Arrays sinnvoll?

Lukaro

Mitglied
Hallo Leute,

Ich beschäftige mich hauptsächlich mit php und habe dort assoziative Arrays, also sowas wie $pcteile['cpus']['dualcore'] ... zu schätzen gelernt.


Sowas würde ich auch gern in Javascript umsetzen, allerdings habe ich gelesen, dass Javascript im Prinzip gar keine assoziativen Arrays kennt, sondern Objekte mit Attributen erzeugt, deren Attribute selbst natürlich keine eigenen Attribute haben können. pcteile['cpus']['dualcore'] ist also nicht möglich, pcteile[0]['dualcore'] schon.

So weit so gut, ich habe mir jetzt prototype in meine Seiten eingebunden, da ich die ajax-Funktionen ganz hilfreich finde. Allerdings erweitert prototype nun die Arrays mit einigen Methoden usw., die ein for (key in array) { ... } verhindern bzw. sinnlos machen.
Die prototype-Hilfe sagt dazu, man solle diese Schleife nicht mehr benutzen.

So, und hier bin ich mit meinem Latein am Ende. Ich brauche eine Schleife, die mir alle keys eines Arrays zurückgibt, also nicht-numerische und die, die ich selbst festgelegt habe.

Oder ist es völlig sinnfrei mit JS/Prototype assoziative Arrays zu machen?
Es soll da ja Enumerables geben, deren Sinn hab ich allerdings nicht verstanden. Eine Alternative?
Oder soll ich lieber die Keys der Arrays in einem anderen Array speichern, also pcteile['cpus'] und pcteilekeys[0] = "cpus"?
Dann könnte man ja normal/numerisch durch die Werte von pcteilekeys wandern und diese dann als keys für pcteile benutzen. Nun, nicht wirklich elegant, oder?

Ich habe leider nie beigebracht bekommen wie man sowas macht, deswegen meine Frage an euch:
Wie machen die Profis das?

Ich hoffe hier ist jemand, der mich versteht und den Weg aus dem Wald zeigen kann...

lG, Lukaro
 
Klar sind mehrdimensionale Arrays auch in JS möglich! Man nennt das ganze dort Hashes. Und es sind in der Tat keine Arrays, sondern Objekte.
Code:
var myArray = {
  cpus : {
    dualcore : 'yo hab ich..'
  } 
};

alert( myArray.cpus.dualcore );

An die attribute kommst du wie folgt:
Code:
var arrKeys = Object.keys( myArray );
// => ['cpus']

Iterieren:
Code:
Object.keys(myArray).each(function(strKey){
  Object.keys(this[strKey]).each(function(strInnerKey){
    alert(this[strInnerKey]); // => 'yo hab ich..'
  }.bind(this[strKey]));
}.bind(myArray));
 
Danke für den Hinweis, ich werde mich mal damit beschäftigen.

Weitere Antworten sind natürlich weiterhin erwünscht :)
 

Neue Beiträge

Zurück