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:]