Javascript split() Funktion
Lorenz
- javascript
Hallo Leute,
Ich möchte ein recht langes Array spliten und dann den neuen Array nach bestimmten Zeichen durchsuchen.
Zum ersten Teil habe ich hier auf selfhtml auch was passendes gefunden, daß bei mir auch prima läuft:
var Zahlen = new Array("abcx|def", "abcy|ghi", "abcz|jkl");
for(i=0;i<Zahlen.length;i++) {
var NeueZahlen=Zahlen[i].split("|")[0];
document.write(NeueZahlen);
}
Nur leider enden alle Beispiele zu diesem Thema entweder in einem allert oder in einem document.write.
Ich möchte aber den neu entstandenen Array (NeueZahlen) nicht schreiben, sondern weiter bearbeiten.
Wenn ich mal von obrigen Beispiel ausgehe, dann sollte der Wert von NeueZahlen = "abcxabcyabcz"; sein.
Auf diese Zeichenkette möchte ich nun die match-Funktion anwenden, um z.B. herauszufinden, wie oft das "a" vorkommt.
Also irgendwo im <body> der Seite schreibe ich dann sowas wie:
var Treffer = NeueZahlen.match(/a/gi); document.write(Treffer.length)
Das Problem dabei ist, ich erhalte den Wert 1 statt 4. Wie ich herrausgefunden habe,
ist der Wert von NeueZahle nur mehr "abcz" (also der letzte Teil), wenn ich auf ihn zugreifen will.
Wie ist es möglich den Wert von NeueZahlen aus dem obrigen Script zu speicher,
konservieren, merken (wie immer man dazu sagen will) um auf ihn zugreifen zu können.
Ich komme da einfach nicht weiter und wäre für jede Hilfe dankbar.
[latex]Mae govannen![/latex]
var Zahlen = new Array("abcx|def", "abcy|ghi", "abcz|jkl");
for(i=0;i<Zahlen.length;i++) {
var NeueZahlen=Zahlen[i].split("|")[0];
document.write(NeueZahlen);
}
Das Problem dabei ist, ich erhalte den Wert 1 statt 4. Wie ich herrausgefunden habe,
ist der Wert von NeueZahle nur mehr "abcz" (also der letzte Teil), wenn ich auf ihn zugreifen will.
Wieso erwartest du 4? Ich sehe nur drei 'a'
Die Zeile var NeueZahlen=Zahlen[i].split("|")[0];
ist gleich in doppelter Hinsicht falsch.
Zum einen initialisierst du mit var
bei jedem Schleifendurchgang die Variable neu, womit der bisherige Inhalt jedes Mal gelöscht wird, zum anderen weist du mit =
der Variable bei jedem Schleifendurchlauf immer nur den Wert der aktuellen Operation zu, statt diese an den bisherigen Inhalt anzuhängen.
Dies geschieht mit variable = variable + Operationsergebnis;
oder kürzer variable += Operationsergebnis;
Um beim ersten Schleifendurchlauf nun keinen Fehler zu erhalten (das wäre undefiniert + Operationsergebnis), wird die Variable _vor_ der Schleife initialisiert und mit einem entsprechenden Wert vorbelegt, im Falle von Zeichenketten ist dies ""
Cü,
Hallo Kai,
mit den drei a's hast du natürlich recht und mit allem anderen auch.
Das Script sollte so aussehen:
var Zahlen = new Array("abcx|def", "abcy|ghi", "abcz|jkl");
var NeueZahlen = "";
for(i=0;i<Zahlen.length;i++) {
NeueZahlen+=Zahlen[i].split("|")[0];
document.write(NeueZahlen);
}
und jetzt funktioniert es auch.
Ist wohl die Macht des Rings.
Ich danke dir vielmals!!
P.S.
obwohl...ein kleines Problemchen habe ich da noch.
(ist schon spät, darum habe ich es nicht gleich gesehen)
Wenn sich die Werte an den vorherigen Wert anhängen, entsteht dann:
abcxabcxabcyabcxabcyabcz
der eigentliche Wert sollte aber nur:
abcxabcyabcz
sein.
In der match-Funktion, die ich dann ausführen will, spreche ich nach wie vor
nur den letzten hinzugefügten Wert an. Der beinhaltet dann zwar auch alle
vorherigen Werte und führt zum richtigen ergebnis, die Variabele wird
aber extrem lang. (in meinem Projekt hängt sich sogar der Browser auf)
Vielleicht habe ich dich auch nur falsch verstanden??
[latex]Mae govannen![/latex]
P.S.
obwohl...ein kleines Problemchen habe ich da noch.
(ist schon spät, darum habe ich es nicht gleich gesehen)
Wenn sich die Werte an den vorherigen Wert anhängen, entsteht dann:
abcxabcxabcyabcxabcyabcz
der eigentliche Wert sollte aber nur:
abcxabcyabcz
sein.
Meinst du in der Ausgabe mit document.write? Das wäre logisch, weil jedes Mal der gesamte Wert zum Zeitpunkt des jew. Schleifendurchlaufs ausgegeben wird.
Sehen kannst du das, wenn du document.write(NeueZahlen+"<br>");
schreibst.
Um nur den fertigen Wert zu erhalten, mußt du document.write hinter die Schleife setzen.
Wenn du aber das jeweilige Teilergebnis ausgeben willst, dann speichere es in einer Variablen und gib diese aus und verkette sie mit += mit NeueZahl:
var Zahlen = new Array("abcx|def", "abcy|ghi", "abcz|jkl");
var NeueZahlen = "";
for(i=0;i<Zahlen.length;i++) {
var zw_ergebnis = Zahlen[i].split("|")[0];
NeueZahlen+= zw_ergebnis;
document.write(zw_ergebnis);
}
solltest du die Einzelwerte später noch benötigen, dann in einem Array ablegen:
var NeueZahlen = "", zw_ergebnis = [];
for(i=0;i<Zahlen.length;i++) {
zw_ergebnis[] = Zahlen[i].split("|")[0]; // alternativ gehts auch mit der push() methode
....
Cü,
Genial!
Genau so klappts, super, danke!!
Darauf hätte ich eigentlich auch kommen müßen,
document.write hinter die Schleife zu setzte.
Da sieht man mal wieder, Javascripting ist gleich ein
ganzes Stück leichter, wenn man was davon versteht.
Grundlage für Zitat #1236.