peterS.: for-in und assoziatives Array

Beitrag lesen

gruss Michael

Hallo Leute,

Ich bin grade am Verzweifeln! Ich erstelle ein assoziatives Array ...

<mantra>JavaScript kennt keine assoziativen_arrays</mantra>

Du bohrst gerade ein Array-object auf. das ist nicht verboten -
   immerhin benutzt Du numerische indizes zur adressierung Deiner
   daten.

und bevölkere es u.a. mittels push() (keine Ahnung ob das wichtig ist
aber präventiv schreib ich das mal). Noch ein Hinweis: Die Keys die ich
benutze sind zwar numerisch, der erste ist aber eine 2 und keine 0...

das macht nichts, dann sind arr[0] und arr[1] eben [undefined].

Nun möchte ich es in einer Schleife durchgehen und da die keys nicht
fortlaufend numerisch sind mache ich das mit for (var x in y)

nimm den klassischen weg ueber "for (var i=0; i<arr.length; ++i) {...}".
   fuer indizes, die Du nicht belegt hast, bekommst Du dann einfach ein
   [undefined] zurueckgeliefert. der typeof-operator hilft Dir, diese werte
   herauszufiltern.

nun bekomme ich leider nicht nur die numerischen keys raus, sondern
auch eine Liste mit array eigenschaften: each,all,any,collect,detect,
findAll,grep,include,inject,invoke,... (32 Stück, im IE ist die
Reihenfolge anders, sonst sind es die gleichen).

dann benutzt Du offensichtlich eine js-bibliothek, die Dein objekt um
   die oben genannten array-eigenschaften erweitert. ein unschuldiges
   sprachkern-array rückt auch bei "for in" wirklich nur seine indizes
   heraus (es wird Dir nochnichteinmal "length" offenbaren).

...
wie soll ich das machen, auch die numerischen keys kommen als typeof
"string"...

das ist nur konsequent - "for ... in" holt _keys_ aus jedem object.

~~~javascript var arr = ["entry 0", "entry 1", "entry 2", "entry 3", "entry 4"];
   var prop, log = "";
   for (prop in arr) {
     log += prop + ":" + (typeof prop) + " = " + arr[prop] + ":" + (typeof arr[prop]) + "\n";
   }
   if (arr.toSource) {
     alert("arr.toSource():\n\n" + arr.toSource());
   }
   alert("log:\n\n" + log);
 //var arr = ["entry 0", "entry 1", "entry 2", "entry 3", "entry 4"];var prop, log = "";for (prop in arr) {log += prop + ":" + (typeof prop) + " = " + arr[prop] + ":" + (typeof arr[prop]) + "\n";}if (arr.toSource) {alert("arr.toSource():\n\n" + arr.toSource());}alert("log:\n\n" + log);

  
  
   by(t)e by(t)e - peterS. - pseliger@gmx.net  
  
  

-- 
"Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.  
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive." - Douglas Crockford  
  
ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]