Unendliches Array- geht das?
barb
- javascript
Hallo forum.
Ich würde gerne wissen ob es möglich ist, ein Array in JavaScript so zu machen das es am Ende wieder mit dem ersten Element anfängt. Es ist ja möglich zu sagen das wenn das aktuelle Element grösser ist als die Länge des Array bei dem ersten weiterzumachen und anders herum. Aber das möchte ich gerade nicht. Ich habe nämlich folgendes Problem: wenn die bilder bis foto10 durchgelaufen sind, kommen danach leere zellen bis wieder von vorne angefangen wird. Hier der code:
var Bilder = new Array("bilderUK/fotos1.gif","bilderUK/fotos2.gif","bilderUK/fotos3.gif","bilderUK/fotos4.gif","bilderUK/fotos5.gif","bilderUK/fotos6.gif","bilderUK/fotos7.gif","bilderUK/fotos8.gif","bilderUK/fotos9.gif","bilderUK/fotos10.gif");
var BildAnzahl = Bilder.length;
var number = 0;
var BildFolge = new Image(); BildFolge.src = Bilder[number];
function change(direction) {
number = number + direction;
if(number <= 0) number = BildAnzahl -1;
else if(number >= BildAnzahl -1 ) number = 0;
BildFolge.src = Bilder[number];
document.austausch1.src = BildFolge.src;
document.austausch2.src = Bilder[number+1];
document.austausch3.src = Bilder[number+2];
document.austausch4.src = Bilder[number+3];
document.austausch5.src = Bilder[number+4];
document.austausch6.src = Bilder[number+5];
}
<tr>
<td width="117" bgcolor="#E9ECE9" ><img src="bilderUK/fotos1.gif" width="50" height="50" border="0" alt="" name="austausch1"></td>
<td width="96" bgcolor="#E9ECE9" ><img src="bilderUK/fotos2.gif" width="69" height="49" border="0" alt="" name="austausch2"></td>
<td width="109" bgcolor="#E9ECE9" ><img src="bilderUK/fotos3.gif" width="50" height="50" border="0" alt="" name="austausch3"></td>
<td width="128" bgcolor="#E9ECE9" ><img src="bilderUK/fotos4.gif" width="50" height="50" border="0" alt="" name="austausch4"></td>
<td width="127" bgcolor="#E9ECE9" ><img src="bilderUK/fotos5.gif" width="50" height="50" border="0" alt="" name="austausch5"></td>
<td width="136" bgcolor="#E9ECE9" ><img src="bilderUK/fotos6.gif" width="69" height="49" border="0" alt="" name="austausch6"></td>
</tr>
Halihallo barb
Ich würde gerne wissen ob es möglich ist, ein Array in JavaScript so zu machen das es am Ende wieder mit dem ersten Element anfängt.
Das geht nicht.
Es ist ja möglich zu sagen das wenn das aktuelle Element grösser ist als die Länge des Array bei dem ersten weiterzumachen und anders herum.
Das ist der richtige Ansatz.
Aber das möchte ich gerade nicht.
Warum?
Ich habe nämlich folgendes Problem: wenn die bilder bis foto10 durchgelaufen sind, kommen danach leere zellen bis wieder von vorne angefangen wird.
Dann ist dein Algorithmus falsch.
if(number <= 0) number = BildAnzahl -1;
else if(number >= BildAnzahl -1 ) number = 0;
So einfach geht das nicht. Wenn number > BildAnzahl-5, dann müssen die letzten
BildAnzahl-number Bilder vom Anfang an adressiert werden (also wieder ab Array-Index 0).
Spiele es einmal mit einem Beispiel durch, du wirst den richtigen Algorithmus schnell
finden.
Viele Grüsse
Philipp
Halihallo barb
So einfach geht das nicht. Wenn number > BildAnzahl-5, dann müssen die letzten
BildAnzahl-number Bilder vom Anfang an adressiert werden (also wieder ab Array-Index 0).
Spiele es einmal mit einem Beispiel durch, du wirst den richtigen Algorithmus schnell
finden.
Ein kleiner Tipp: Der Modulo-Operator wirkt hier wunder:
http://selfhtml.teamone.de/javascript/sprache/operatoren.htm#berechnung
x = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
x % 6 = 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3
=>
function get_absolute_array_index(i) {
return i % 6;
}
das dürfte der Lösungs Schlüssel sein.
Viele Grüsse
Philipp
Mein Held! Ich würde dir tausend Königreiche schicken!
Halihallo barb
Mein Held! Ich würde dir tausend Königreiche schicken!
Danke für die Königreiche! :-)
Freut mich, dass es klappt.
Viele Grüsse
Philipp
Moin Moin !
Jetzt muß ich doch mal den Pedanten rauslassen:
Ein unendliches Array kann es nicht geben, da Du nie genug Speicher haben wirst. Codiere Dein Array auf Atome, dann kannst Du ca. 10^38 Elemente speichern, bevor Dir in diesem Universum die Atome ausgehen (bitte nicht genau auf die Zahl festlegen). 10^38 ist aber noch lange nicht unendlich. Codiere es auf Protonen und Neutronen und Du schaffst vielleicht 10^39 oder 10^40. Auf Quarks und Gluonen und die ganzen anderen subatomaren Partikel: mit viel Glück 10^41. Immer noch nicht unendlich. Ein paar größere Zahlen gäbe es noch: Googol (10^100) und Googolplex (10^(10^100)), siehe http://www.wikipedia.org/wiki/Googol. Aber auch die sind noch lange nicht unendlich. Und Dir geht der Speicherplatz jetzt wirklich aus. Schade.
Was Du eigentlich meintest ist ein endloses Array, ein Array ohne Enden. Eine Kreislinie hat keine Enden, aber deswegen ist sie noch lange nicht unendlich.
Alexander
Moin Moin !
Jetzt muß ich doch mal den Pedanten rauslassen:
Ein unendliches Array kann es nicht geben, da Du nie genug Speicher haben wirst. Codiere Dein Array auf Atome, dann kannst Du ca. 10^38 Elemente speichern, bevor Dir in diesem Universum die Atome ausgehen (bitte nicht genau auf die Zahl festlegen). 10^38 ist aber noch lange nicht unendlich. Codiere es auf Protonen und Neutronen und Du schaffst vielleicht 10^39 oder 10^40. Auf Quarks und Gluonen und die ganzen anderen subatomaren Partikel: mit viel Glück 10^41. Immer noch nicht unendlich. Ein paar größere Zahlen gäbe es noch: Googol (10^100) und Googolplex (10^(10^100)), siehe http://www.wikipedia.org/wiki/Googol. Aber auch die sind noch lange nicht unendlich. Und Dir geht der Speicherplatz jetzt wirklich aus. Schade.
Was Du eigentlich meintest ist ein endloses Array, ein Array ohne Enden. Eine Kreislinie hat keine Enden, aber deswegen ist sie noch lange nicht unendlich.
Alexander
mistiger pedant.ich kam doch nur nicht auf den Namen, ich meinte ein....scheisse......ein.. ...einen.. RINGBUFFER!!! tataaaa! aber das ist mist, das weiss ich jetzt auch.