• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

new Array eleganter

Status
Für weitere Antworten geschlossen.

gerdilein

Neues Mitglied
Ich brauche für eine Funktion einen new Array, der die Zahlen von 0 bis vielleicht 200 enthält. Könnten auch mehr sein oder immer wieder mal ein paar hinzu kommen.
(Es geht um Bilddaten, die in zufälliger Reihenfolge dargestellt werden sollen. Kommen immer wieder Neue hinzu.)

Bisher siehts so aus:
function ShuffleMe(myarray) {
for( var i=0; i<myarray.length; i++ ) {
var k = parseInt(Math.random()*myarray.length), j = myarray[k];
myarray[k] = myarray, myarray = j;
}
return myarray;
}

Jetzt kommt die doofe Array-Klammer, die so super viele Zahlen enthält, die ich gar nicht alle tippen will:
var Reihenfolge = ShuffleMe( new Array(0, 1, 2, 3, 4, 5, 6, ...) );
Dann noch:
for( var i=0; i<Reihenfolge.length; i++ ) {
document.write('<img src="Bilder/' + Bilder[ Reihenfolge ] + '.jpg" alt="" border="0">');
}
Ich könnte mir vorstellen, dass man das eleganter lösen kann.
Eine zusätzliche Funktion vielleicht, in die ich nur die höchste Zahl eingeben muss.
Ich hätte dann nicht so eine riesig lange Array-Klammer und müsste nicht so viele Zahlen tippen.
 
Ich würde die Bilder direkt zufällig anordnen:
Code:
Array.prototype.randomize = function() {
     var i = this.length, r, tmp;
     while (--i) {
         r = Math.floor(Math.random() * (i + 1));
         tmp = this[i];
         this[i] = this[r]
         this[r] = tmp;
     }
     return this;
}

var images = ["foo.jpg", "bar.jpg", ...];
var randomImages = images.randomize();

// ausgeben
 
Dann habe ich statt einer solchen Klammer: (1, 2, 3, 4, 5, 6, ...200)
halt eine Klammer, die so aussieht: ["Bild1.jpg", "Bild2.jpg", "Bild3.jpg" ... "Bild200.jpg"];

Die "Verzufallisierung" ist zwar damit direkter, also ohne Umweg gelöst.
Mein ursprüngliches Problem ist damit aber doch nur verschoben.
Und keinesfalls besser.
Oder?
 
pop()? meinst du push?

Mein Vorschlag wäre:
Code:
var images = [];
for (var i = 1; i <= 200; i++) {
    images.push("bilder/" + i + "-.jpg");
}
und dann den Code wie bisher.
 
Leider habe ich es nicht geschafft einen der Vorschläge erfolgreich einzubauen.

Übrigens: die jpgs, die ich ausgeben will, heißen in Wirklichkeit gar nicht "Bild1" bis "Bild200". Das war von mir vielleicht etwas missverständlich ausgedrückt. Die haben irgendwelche inhaltsbeschreibenden Namen.

Ich habe diese Namen der jpgs in einer externen js-Datei sozusagen als Datenbank ausgelagert. Das geschah im Zuge einer Mini-Suchfunktion, weil ich da ganz gut zudem noch tags zu jedem jpg zuordnen kann.

So sieht meine "Datenbank" aus:

Code:
function datensatz(ln,logo,suchbegriffe) {
   this.ln = ln;                       // eine laufende Nummer
   this.logo = logo;                   // der Name des Bildes (ohne Suffix)
   this.suchbegriffe= suchbegriffe;    // von mir erteilte Suchbegriffe 
};

var daten=new Array();
daten[daten.length]=new datensatz("0","motorhaus","kfz Werkstatt Autos");
daten[daten.length]=new datensatz("1","saegewerk","Holz Baum Späne");
...
daten[daten.length]=new datensatz("200","Theke","Barhocker Bier Zeche");
Mit dem Bereich "ln" wollte ich meine ungeliebte Array-Klammer einfach auslagern.
Das ist vermutlich aber nur gemurkse, und mir bisher auch noch nicht gelungen.

Jetzt nochmal zu meinem ursprünglichen Problem:
Der Code sieht bisher so aus:

Code:
function MischMich(myarray) {
for( var i=0; i<myarray.length; i++ ) {
var k = parseInt(Math.random()*myarray.length), j = myarray[k];
myarray[k] = myarray[i], myarray[i] = j;
}
return myarray;
}

var Reihenfolge = MischMich(new Array(0, 1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26));

for( var a=0; a<Reihenfolge.length; a++ ) {
document.write('<a href="info.html#' + daten[ Reihenfolge[a] ].logo + '" target="info" ><img src="logos/' + daten[ Reihenfolge[a] ].logo + '.jpg" alt=""></a>');
}
Man sieht in der Mitte immer noch hübsch die von mir so ungeliebte Array-Klammer mit den vielen Zahlen. Es werden über 200 sein wenns fertig ist.
Darum hatte ich in meiner Datenbank noch die "laufende Nummer" (ln) zugefügt.
Darauf wollte ich dann an entsprechender Stelle zugreifen.
Bin ich aber nicht schlau genug für.

Aber ich weiß schon, dass es in diesem Forum schlaue Menschen gibt. Denen bin ich sehr dankbar.
 
Scheinbar hast du von den oberen Codes nicht umgesetzt, sondern stur deines weiter benutzt.

Lass dir das Bilder von einer Server-seitigen Sprache als Array ausgeben.
 
Vielleicht vermutest du zu viel Grundwissen bei mir.
Aber es ist ja hier ein Forum für ANFÄNGER und Fortgeschrittene.
Versucht habe ichs.
Aber mangels Wissen hat das wohl nicht geklappt.

Ich würde mich über einen Lösungsvorschlag freuen, der so formuliert ist, dass ich den (trotz meines nicht vorhandenen Wissens) verstehen und umsetzen kann.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben