Nun würde ich gerne den Inhalt meiner HashMap ausgeben:
var txt="";
for(i=0;i
Das geht leider nicht.
Ein simples toString() ergibt:
alert(arr); -\> ,,,
Hat jemand eine Ahnung wie über eine HashMap iterieren kann und
an key und value heran kommt?
Andere Idee wäre eine eigene Klasse zu implementiern
die Folgende Methoden enthält:
String:getKey(index)
String:getValue(index)
int:size()
void:stuck\_out\_tongue:ut(key,value)
Aber vielleicht kennt jemand eine einfachere Lösung.
Bin gespannt auf Vorschläge.
Gruß Christian
Nun würde ich gerne den Inhalt meiner HashMap ausgeben:
var txt="";
for(i=0;i
Das geht leider nicht.
weil du ein named array erstellt hast, du hast nur noch die indizes „key1“…
Ein simples toString() ergibt:
alert(arr); -> ,
Hat jemand eine Ahnung wie über eine HashMap iterieren kann
und an key und value heran kommt?
var arr = new Array();
arr['key1']="value1";
arr['key2']="value2";
arr['key3']="value3";
var str = "";
for (i in arr)
{ str += i+":"+arr[i]+"\n"; }
alert(str)
Andere Idee wäre eine eigene Klasse zu implementiern
var str = „“;
for (i in arr)
{ str += i+":"+arr[i]+"\n"; }
alert(str)
Andere Idee wäre eine eigene Klasse zu implementiern
du ahst zuiel java geschrieben ;->
Stimmt - aber eine JS-Klasse ist auch sehr smart!
Zeitgleich habe ich auch am Problem gearbeitet und bin
bei SelfHTML auf das Konstrukt for-in gestossen, das ich
bisher noch nicht kannt.
Die korrekte Bezeichnung ist assoziativ Array und nicht HashMap.
Was man alles dazu lernt…
Danke für die Hilfe ersteinmal.
Vielleicht eine kleine Kopfnuss zum Abschluss: (habe ich jetzt gelöst bekommen)
Ich würde nun gerne folgende Ausgabe sehen:
Die Map enthält 3 Elemente:
Pos: 0 key = Schlüssel1 value = wert\_blabla
Pos: 1 key = SchlüsselX value = wert\_X\_blabla
Pos: 2 key = SchlüsselXY value = wert\_blabla
Falls interesse besteht poste ich meine Lösung heute Abend.
(als kleines Dankeschön für die schnelle Hilfe)
Beachten Sie:
Wenn Sie mehr als eine Anweisung von einer for-Schleifenbedingung abhängig machen wollen, müssen Sie die Anweisungen wie üblich in geschweifte Klammern einschließen.
Die for in-Schleife können Sie in Opera nur auf selbstdefinierte Objekte und Variablen anwenden. Bei vordefinierte Objekten bleibt die Schleife wirkungslos.
Der MS Internet Explorer kennt diese Schleifenart erst ab Version 4.01.
Meine erste Version hat auch ähnlich wie Deine ausgesehen:
txt="";
i=0;
for(var key in cA) txt+="pos "+(i++)+" key = "+key+" value = "+cA[key]+"\n";
alert("ausgabe mit for-in:\n"+txt);
Abgesehen der in SelfHTML beschriebenen Browserprobleme
habe ich noch ein weiteres ungewöhnliches Feld bei
der Ausgabe entdeckt.
Irgendwo im meinem JS-Source habe ich den Prototype
von Object um die Methode clone erweitert:
/\*\*
\* Clonen von Objecten
\*/
Object.prototype.clone =
function clone (deep) {
var objectClone = new this.constructor();
for (var property in this)
if (!deep)
objectClone[property] = this[property];
else if (typeof this[property] == 'object')
objectClone[property] = this[property].clone(deep);
else
objectClone[property] = this[property];
return objectClone;
}
In der Ausgabe des assoziativen Arrays befindetet sich nun also die Dekleraion von clone.
Ich habe eine sichereren weg gefunden:
var cA=new Array();
var cAI=new Array();
...
cA['schluessel1']="wert1";
cAI[0]="schluessel1";
cA['schluessel2']="wert2";
cAI[1]="schluessel2";
...
usw.
...
txt="";
for(i=0;i
Zwar brauche ich hier ein weiteres Array, habe aber keine Probleme mit Browsern bzw. dem clone.
Was man alles dazu lernt ...
Gruß Christian