HighDots Forums  

Array in for Schleife speichern

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Array in for Schleife speichern in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Olaf Gleba
 
Posts: n/a

Default Array in for Schleife speichern - 12-14-2007 , 07:22 AM






Moin.

Eine Fragestellung, die mich offensichtlich verfolgt alle paar Monate.
Und jedesmal vergesse ich die Lösung wieder:

Ich möchte die Ergebnisse eines For-Schleife Durchlaufes in einem
Array speichern ("b") und dieses Array außerhalb der Schleife per
Index ansprechen.

Beispiel:

for (...) {
b = new Array();

// aus dem array a werden div. rausgeholt -> getestet
b = a[i].replace(re, "$2");
}

Zugriff auf das "b" Array über Index, bspw.
alert ( b[0]);

Kann mir jemand einen Schubs geben, wo der Fehler ist? Danke schon
jetzt.
Olaf




Reply With Quote
  #2  
Old   
horst lorenz
 
Posts: n/a

Default Re: Array in for Schleife speichern - 12-14-2007 , 09:32 AM








Olaf Gleba schrieb:
.
Quote:
Beispiel:

for (...) {
b = new Array();

// aus dem array a werden div. rausgeholt -> getestet
b = a[i].replace(re, "$2");
alert(typeof b);

Überraschung?

Tschüß Horst.


Reply With Quote
  #3  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Array in for Schleife speichern - 12-14-2007 , 01:06 PM



Olaf Gleba wrote:
Quote:
Ich möchte die Ergebnisse eines For-Schleife Durchlaufes in einem
Array speichern ("b") und dieses Array außerhalb der Schleife per
Index ansprechen.

Beispiel:

for (...) {
b = new Array();
Wenn Du so wie hier `b' bei jedem Schleifendurchlauf überschreibst, kann das
nichts werden. Du erzeugst so nur mehrere Array-Objekte, die alle bis auf
das zuletzt erzeugte nach einer gewissen Zeit buchstäblich weggeworfen
werden (Garbage Collection), weil sie nicht mehr referenziert werden.

Quote:
// aus dem array a werden div. rausgeholt -> getestet
b = a[i].replace(re, "$2");
Damit überschreibst Du dann auch noch die letzte verbliebene
Array-Objekt-Referenz mit einem *String-Wert* und veranlasst damit
auch die spätere Entsorgung des zuletzt erzeugten Array-Objekts.

Quote:
}

Zugriff auf das "b" Array über Index, bspw.
alert ( b[0]);

Kann mir jemand einen Schubs geben, wo der Fehler ist?
Die Initialisierung muss *vor* der Schleife stattfinden, und Du musst das
*Array-Element* definieren, nicht die Array-Objekt-Referenz überschreiben:

var b = new Array(), i = 0;

for (var p in o)
{
b[i] = o[p].replace(re, "$2");
i++;
}

Zu bedenken ist bei diesem Beispiel, dass für `for..in' keine
Iterationsreihenfolge spezifiziert ist; das ist nur mit `for (...; ...; ...)
oder seit JavaScript 1.7 (Gecko 1.8.1+, u.a. Firefox 2.0+) auch mit
Iteratoren, und natürlich durch nachträgliche Sortierung des Ergebnisarrays
möglich.

http://developer.mozilla.org/en/docs...ments:for...in
http://developer.mozilla.org/en/docs..._1.7#Iterators

Seit JavaScript 1.6 (Gecko 1.8b2+, u.a. Firefox 1.5+) kannst Du übrigens
Array.prototype.map() verwenden, so dass kein zusätzliches Array mehr nötig ist:

a.map(function(e, i, a) { return e.replace(re, "$2"); });

http://developer.mozilla.org/en/docs...ects:Array:map


HTH

PointedEars


Reply With Quote
  #4  
Old   
Olaf Gleba
 
Posts: n/a

Default Re: Array in for Schleife speichern - 12-14-2007 , 05:01 PM



On 14 Dez., 16:32, horst lorenz <le... (AT) arcor (DOT) de> wrote:
Quote:
alert(typeof b);

Überraschung?
Verstehe ich jetzt nicht so ganz. Ok. ich weiß ja, das ich bei einem
typeof oder auch einem b.contructor "String" zu sehen bekomme. Ich
frage mich ja eher, warum das so ist? Wo doch b als Array definiert
ist.

gruss
Olaf



Reply With Quote
  #5  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Array in for Schleife speichern - 12-14-2007 , 05:31 PM



Olaf Gleba wrote:
Quote:
On 14 Dez., 16:32, horst lorenz <le... (AT) arcor (DOT) de> wrote:
alert(typeof b);

Überraschung?

Verstehe ich jetzt nicht so ganz. Ok. ich weiß ja, das ich bei einem
typeof oder auch einem b.contructor "String" zu sehen bekomme. Ich
frage mich ja eher, warum das so ist? Wo doch b als Array definiert
ist.
Nochmal zum Mitmeisseln:

`b' ist solange eine Referenz zu einem Array-Objekt, wie Du `b' nicht mit
einem String-Wert *überschreibst*.

1. var b; b ---> undefined
for (...) {

// erster Schleifendurchlauf
2. b = new Array() b ---> new Array()
3. b = a[i].replace(re, "$2"); b ---> string

// nächster Schleifendurchlauf
4. b = new Array(); b ---> new Array()
5. b = a[i].replace(re, "$2"); b ---> string

// weitere Schleifendurchläufe
...

6. alert(b[0]); b[0] ---> implementationsabhängig

JavaScript liefert bei dem *String-Wert* `b' mit b[0]
das erste Zeichen des Strings, JScript liefert `undefined'.

Jetzt klar?


PointedEars
--
Snowboarder k÷nnen gar kein JavaScript. Sie klicken in Dreamweaver
'was zusammen und glauben, das sei "Programmieren".

-- Andreas Hollmann in dciwam


Reply With Quote
  #6  
Old   
Olaf Gleba
 
Posts: n/a

Default Re: Array in for Schleife speichern - 12-15-2007 , 07:31 AM



On 15 Dez., 00:31, Thomas 'PointedEars' Lahn <PointedE... (AT) web (DOT) de>
wrote:

Quote:
Jetzt klar?
Vielen herzlichen Dank für deinen ausführlichen Kommentar!

Ich hatte vorhin nochmal mit google gesucht. Mein Posting und
Folgepostings sind auch bei bspw. 'meinews.net' sichtbar. Hier sah ich
dann, das du gestern vor meinem letzten Posting ("Verstehe ich jetzt
nicht...") was erklärendes geschrieben hast - sonderbarer Weise sehe
ich hier auf groups.google diesen Eintrag nicht. Merkwürdig.

Nochmal vielen Dank für das Kopfstoßen. Ich denke, ich werde das
Posting mal lokal archivieren um mich beizeiten ggf. dann selber an
den Kopf zu können.

gruss
Olaf


Reply With Quote
  #7  
Old   
horst lorenz
 
Posts: n/a

Default Re: Array in for Schleife speichern - 12-15-2007 , 08:51 AM





Olaf Gleba schrieb:
Quote:
On 15 Dez., 00:31, Thomas 'PointedEars' Lahn <PointedE... (AT) web (DOT) de
Ich hatte vorhin nochmal mit google gesucht. Mein Posting und
Folgepostings sind auch bei bspw. 'meinews.net' sichtbar. Hier sah ich
dann, das du gestern vor meinem letzten Posting ("Verstehe ich jetzt
nicht...") was erkl�rendes geschrieben hast - sonderbarer Weise sehe
ich hier auf groups.google diesen Eintrag nicht. Merkw�rdig.
Bei mir kommen auch häufiger die Postings über die Website von
groups.google.com nicht an. Oben wird die Zahl der Postings angegeben,
aber es fehlen immer wieder einige. Jemand eine Idee was falsch läuft?

Tschüß Horst.


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.