"Array zuweisung" die Zweite
Christian
- javascript
Hallo Leuts ich hatte vorhin schon einmal gepostet, ich glaube allerdings mich ein wenig kompliziert ausgedrückt zu haben, denn das problem ist eigentlich recht simpel und es sollte auch eine recht simple lösung dafür bestimmt geben.
Also folgends
Ich habe ein Variable x in dieser steht eine zahl (x=10) nun habe ich eine array variable y und will nun ein assoziatives array damit erzeugen, soll heissen, dass ich auf bestimmte werte in der y arrayvariable mit einem string zugriefe statt über den zahlenindex
kleines beispiel:
y["10"] = "Meier";
soweit so gut, denn das funktioniert auch gut so.
Jetzt zum problem, wie kann ich es handhaben das ich das ganze über eine variable steuer
kleines beispiel:
y[x] = "Meier" //wir erinnern uns das in x = 10 steht
würden wir das so anwenden, würde er allerdings den string "meier" ins 11. ArrayElement schreiben, dass ist aber nicht sinn der sache zumal ich es ja assoziativ halten will
also habe ich mir gedacht könnte man ganz einfach mit
y[String(x)] = "Meier";
den Wert x explizit als String deklarieren, und es somit schaffen das der schlüsselwert um auf das element zuzugreifen dann der string "10" ist.
Das klappt allerdings nicht, da JAvascript scheins automatisch den String in einen nummerischen Wert konvertiert.
Was glaube ich fehlt sind die anführungszeichen sprich das "" ZEichen, welches aussagt das es sich definitiv um ein string handel und nicht um einen nummerischen wert.
So habe ich folgendes probiert bin allerdings an der fehlermeldung des IE gescheitert
kleines Beispiel:
(eval("y['"+x+"']")) = new Array();
Fehlermeldung des IE:"cannot assign to a function result"
klingt irgendwie logisch, ich habe es jedoch nicht geschaft das problem in irgend einer weise zu lösen, bitte daher um dringe hilfe.
Das problem gab es bestimmt schon oft und wird leicht zu beantworten sein, hoffe ich zumindest.
DAnke schonma im voraus.
gruß Christian
Hallo Christian
Ich habe ein Variable x in dieser steht eine zahl (x=10) nun habe ich eine array variable y und will nun ein assoziatives array damit erzeugen, soll heissen, dass ich auf bestimmte werte in der y arrayvariable mit einem string zugriefe statt über den zahlenindex
kleines beispiel:
y["10"] = "Meier";
Zahlen als Schlüssel in assoziative Arrays sind immer eine schlechte Idee, da eine automatische Typ-Konvertierung stattfindet.
y=new Array();
y["10"]="Meier";
alert(y.length); //11
Was glaube ich fehlt sind die anführungszeichen sprich das "" ZEichen, welches aussagt das es sich definitiv um ein string handel und nicht um einen nummerischen wert.
nein, wie du an meinem simplen Beispiel siehst, findest die Konvertierung bereits früher statt.
Warum machst du nicht folgendes?
y=new Array();
y["a"+10]="Meier";
alert(y.length); //0
und greifst mit
x=10;
alert(y["a"+x]);
auf die Werte zu?
Viele Grüße
Antje
Danke dir erstmal Antje, habe aber trotzdem weiterhin folgends Problem was ich einfach nicht verstehe.
Beispiel-1
test = new Array();
test['test'] = new Array();
alert(test.length); // ergibt = 0
Beispiel-2:
test = new Array();
test[0] = new Array();
alert(test.length); // ergibt = 1
so und nun erklärt mir doch mal bitte warum Javascript es einfach nicht gebacken bekommt beim ersten Beispiel. dem Array element mit dem SChlüsselwert "test" ein array zuzuordnen ??????????????!
Hi!
test = new Array();
test['test'] = new Array();
alert(test.length); // ergibt = 0Beispiel-2:
test = new Array();
test[0] = new Array();
alert(test.length); // ergibt = 1
Naja, die length-Eigenschaft gibt nicht die Anzahl der im Array gespeicherten Elemente an, sondern ist einfach eine Zahl, die groesser als jeder im Array vorkommende Index ist, wobei ein "Index" der Name einer Eigenschaft ist, den man als Zahl lesen kann. Alles klar? ;-)
Also, in JS ist ein Array nicht so ein richtiges Array wie in anderen Sprachen, sondern es ist ein Objekt mit vielen Eigenschaften. Man kann dann ein klassisches Array simulieren, indem man einfach die Namen der Eigenschaften so waehlt, dass sie in Zahlen umgewandelt werden koennen, also z.B. "0", "1", "2", ... Diese Eigenschaften nennt man dann Indizes. Solange man sich an dieses Schema haelt, wird immer automatisch die length-Eigenschaft angepasst, naemlich so, dass sie einfach eins groesser als der groesste Index ist, d.h. sie enhaelt immer die Anzahl der Elemente. Wenn Du jetzt aber eine andere Eigenschaft namens "test" einfuehrst, die man ja ganz klar nicht als Zahl interpretieren kann und die damit nicht als Index verwendet werden kann, na dann ist der ganze Spass mit length hinfaellig.
Uebrigens lassen sich auch ganz leicht Luecken ins Array einbauen, indem man nicht alle aufeinanderfolgenden Indizes verwendet. Hast Du die Eigenschaften "0", "1", 3", "4", "5" verwendet, so ist bei 2 eine Luecke. In length steht dann der Wert 6, obwohl Du nur 5 Elemente hast.
Das gilt uebrigens alles nur, wenn ich die ECMA-Spec richtig verstanden habe. Was die Browser machen - und hier sei insbesondere der IE genannt - muss damit nicht unbedingt immer uebereinstimmen.
So long
AAAAAAhaa, endlich klartext ;)
wow danke dir Calocybe
habe verstanden, naja wirklich ausgeklügelt ist JS ja nicht gerade, bin normalerweise andere sprachen gewöhnt ;)
Aber das muss man erstmal wissen
also nochmals danke.
AAAAAAhaa, endlich klartext ;)
wow danke dir Calocybe
habe verstanden, naja wirklich ausgeklügelt ist JS ja nicht gerade, bin normalerweise andere sprachen gewöhnt ;)
Wo?
In Perl gibt es auch keine Eigenschaft length für ein assoziatives Array, dort benutzt man 'keys' in JS musst du auf for x in object zurückgreifen.
Struppi.