Alle Schlüssel eines Arrays auslesen
BerndK
- javascript
0 m@y0 Antje Hofmann0 BerndK0 Antje Hofmann0 BerndK
0 Struppi0 MudGuard
Hi,
ich hab folgendes Problem:
Ich hab ein 3dim-JS-Array average. Die ersten beiden Schlüssel sind gegeben, ich hab also average[0123]['test']. Nun möchte ich alle Schlüssel in der 3ten dimension von average[0123]['test'] ausgeben lassen. Wie kann ich das machen?
Vielen Dank
Bernd
Hi,
du lässt dir mit average[0123]['test'].length die länge des Arrays in 'ne Variable ausgeben und schreibst dann 'ne for-schleife in der du von 0 < arraylänge dir alle werte ausgeben lässt:
var arraylänge = average[0123]['test'].length;
for(i = 0; i<arraylänge; i++)
{
alert(average[0123]['test'][i]);
}
mfg, m@y
Hallo Bernd, hallo m@y
du lässt dir mit average[0123]['test'].length die länge des Arrays in 'ne Variable ausgeben und schreibst dann 'ne for-schleife in der du von 0 < arraylänge dir alle werte ausgeben lässt:
m@y,
das geht natürlich nur bei indizierte Arrays. Sobald ein Element der Form average[0123]['test']['test1'] auftritt, funktioniert deine Lösung nicht mehr.
Bernd,
was du suchst ist die for-in-Schleife. Siehe auch: http://selfhtml.teamone.de/javascript/sprache/schleifen.htm#for
Viele Grüße
Antje
Danke Antje, danke m@y,
die for-in-Schleife sieht nicht schlecht aus, leider bringt die nur mein letztes Element.
Hier ein Auszug aus meinem Array-Aufbau:
average[06008120] = new Array();
average[06008120]['temp1'] = new Array();
average[06008120]['temp2'] = new Array();
average[06008120]['temp1']['test1']='-';
average[06008120]['temp2']['test1']='0';
average[06008120]['temp1']['test2']='1sec';
average[06008120]['temp2']['test2']='1sec';
average[06008120]['temp1']['test3']='81.65';
average[06008120]['temp1']['test4']='96.28';
average[06008120]['temp1']['test5']='122.78';
average[06008120]['temp2']['test3']='81.65';
average[06008120]['temp2']['test4']='96.28';
average[06008120]['temp2']['test5']='122.78';
average[06008120]['temp1']['test6']='0';
average[06008120]['temp2']['test6']='0';
average[06008120]['temp1'] ist bekannt, also sollte er mir in der for-in-Schleife
test1
test2
test3
test4
test5
test6
ausgeben.
Aufbau der for-Schleife:
for(var val in average[06008120]['temp1'])
{
alert(val);
}
Leider erhalte ich nur test6. Was ist falsch? Der Aufbau des Arrays ist doch in Ordnung, oder?
Vielen Dank
Hallo Bernd,
die for-in-Schleife sieht nicht schlecht aus, leider bringt die nur mein letztes Element.
konnte ich nicht nachvollziehen. Alle Browser (NN4 nach einer kleinen Korrektur) durchliefen, alle Elemente in der Schleife.
Unterschiede gab es nur bei Opera, der die Elemente in der Reihenfolge
test2
test1
test6
test5
test4
test3
durchlief.
average[06008120] = new Array();
NN4 macht hier Probleme. Er interpretiert die Zahl 06008120 auf Grund der führenden Null als Oktalzahl und stört sich dann an der 8, da diese Ziffer keine gültige Oktalzahl ist.
besser also: average['06008120'] verwenden oder die führende Null weglassen.
for(var val in average[06008120]['temp1'])
{
alert(val);
}Leider erhalte ich nur test6.
könnte es sein, das nach
for(var val in average[06008120]['temp1'])
irgendwo ein ; rumgeistert? Dann wird das Alert nur für den letzten Wert ausgegeben.
Sicherheitshalber hier meine Testdaten:
average = new Array();
average['06008120'] = new Array();
average['06008120']['temp1'] = new Array();
average['06008120']['temp2'] = new Array();
average['06008120']['temp1']['test1']='-';
average['06008120']['temp2']['test1']='0';
average['06008120']['temp1']['test2']='1sec';
average['06008120']['temp2']['test2']='1sec';
average['06008120']['temp1']['test3']='81.65';
average['06008120']['temp1']['test4']='96.28';
average['06008120']['temp1']['test5']='122.78';
average['06008120']['temp2']['test3']='81.65';
average['06008120']['temp2']['test4']='96.28';
average['06008120']['temp2']['test5']='122.78';
average['06008120']['temp1']['test6']='0';
average['06008120']['temp2']['test6']='0';
for(var val in average['06008120']['temp1'])
{
document.writeln(val,"<br>");
}
Gruß
Antje
Danke antje,
hab meinen Fehler gefunden.
Ich sag nur: eval is evil ;)
Gruss
Bernd
Ich hab ein 3dim-JS-Array average. Die ersten beiden Schlüssel sind gegeben, ich hab also average[0123]['test']. Nun möchte ich alle Schlüssel in der 3ten dimension von average[0123]['test'] ausgeben lassen. Wie kann ich das machen?
Das ist kein Array!
Das sind Objekte und die "Schlüssel" sind Attribute. Du hast also ein Objekt average mit dem Attribut '0123' (wobei man hier aufpassen muss, wenn du das wirklich als Array definierst, dan hat dein Array 123 leere Einträge, deshalb ist es sinnvoll Objekte als Objekte zu definieren) das wiederrum ein Objekt ist und die Eigenschaft 'test' hat. Deinieren solltest du das so:
average = new Object();
average['0123'] = new Object();
.....
Das macht in deinem Beispiel mehrfach Sinn. Einmal um das leere Array zu vermeiden und anderseits damit du nicht auf den Gedanken kommst mit length zu arbeiten, da Objekte keine Länge haben. Du kannst nur alle Eigenschaften des Objektes durchwandern mit einer for in Schleife.
Struppi.
Hi,
Ich hab ein 3dim-JS-Array average. Die ersten beiden Schlüssel sind gegeben, ich hab also average[0123]['test']. Nun möchte ich alle Schlüssel in der 3ten dimension von average[0123]['test'] ausgeben lassen. Wie kann ich das machen?
Das ist kein Array!
Das sind Objekte und die "Schlüssel" sind Attribute. Du hast also ein Objekt average mit dem Attribut '0123' (wobei man hier aufpassen muss, wenn du das wirklich als Array definierst, dan hat dein Array 123 leere Einträge,
Nein, 82. 0123 = 83. Denn 1 * 8^2 + 2 * 8^1 + 3 * 8^0 = 63.
Probier mal javascript:alert(0123) in der Adreßzeile Deines Browsers. Nur der Opera macht es (m.E.) falsch.
Siehe http://devedge.netscape.com/library/manuals/2000/javascript/1.5/guide/ident.html#1008351
cu,
Andreas