Frage

Ich habe eine Website für einen Künstler Freund von mir erstellt, und sie will das Layout gleich bleiben, aber sie will auch neue Bilder, die sie produziert hatte in das aktuelle Layout gemischt werden. So habe ich 12 Thumbnails (thumb1 - thumb12) auf der Haupt-Galerie und 18 Bilder (img1 - img18) als auch zu platzieren

Der Ansatz, den ich dachte, war eine Reihe von allen Bildern zu erstellen, randomize es, dann einfach die ersten 12 abkratzen und sie in die Daumenschlitze laden. Ein anderer Ansatz wäre, 12 Bilder auswählen, die zufällig aus dem Array. Im ersten Fall kann ich nicht einen Weg finden, um die Elemente eines Arrays randomisieren. Im letzteren Fall kann ich mein Gehirn um nicht umgebrochen, wie Bilder zu halten, mehr als einmal geladen, andere als ein zweites Feld mit, was sehr ineffizient und beängstigend scheint.

Ich bin all dies in Javascript, die übrigens zu tun.

War es hilfreich?

Lösung

Ich schrieb dies vor einer Weile, und es geschieht so passen, was Sie suchen. Ich glaube, es ist das Fisher-Yates mische dass ojblass bezieht sich auf:

Array.prototype.shuffle = function() {
   var i = this.length;
   while (--i) {
      var j = Math.floor(Math.random() * (i + 1))
      var temp = this[i];
      this[i] = this[j];
      this[j] = temp;
   }

   return this; // for convenience, in case we want a reference to the array
};

Beachten Sie, dass Modifizieren Array.prototype schlechte Form angesehen werden kann. Man könnte dies als eigenständige Methode implementieren möchten, die das Array als Argument. Wie auch immer, beenden sie ab:

var randomSubset = originalArray.shuffle().slice(0,13);

Oder, wenn Sie nicht wollen, tatsächlich ändern, das Original:

var randomSubset = originalArray.slice(0).shuffle().slice(0,13);

Andere Tipps

Sie sollten die Fisher-Yates mische (sonst als Knuth Shuffle bekannt ).

Blick auf die große Antwort zur Verfügung gestellt hier .

Ihr erster Ansatz funktionieren würde. Shuffle einfach die 18 Elemente und nehmen Sie die ersten 12.

Ich kam vor kurzem über dieses Problem selbst. Der Beitrag hier geholfen: http://waseemsakka.com/2012/02/14/javascript-dropping-the-last-parts-of-an-array-and-randomizing-the-order-of -an-Array / .

Grundsätzlich starten, indem Sie Ihre Array Randomisierung:

thumbs.sort(function(a, b) {
     return Math.random() - 0.5;
})

Dies wird die Reihenfolge der 18 Elemente randomisieren. Dann halten nur die ersten 12 Elemente, würden Sie nur fallen die letzten 6:

thumbs.length = 12;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top