Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Randomizing elements in an array?

I've created a site for an artist friend of mine, and she wants the layout to stay the same, but she also wants new paintings she'd produced to be mixed into the current layout. So I have 12 thumbnails (thumb1 - thumb12) on the main gallery page and 18 images (img1 - img18) to place as well

The approach I thought of was to create an array of all the images, randomize it, then simply scrape off the first 12 and load them into the thumb slots. Another approach would be to select 12 images randomly from the array. In the first case, I can't find a way to randomize the elements of an array. In the latter case, I can't wrap my brain around how to keep images from loading more than once, other than using a second array, which seems very inefficient and scary.

I'm doing all of this in Javascript, by the way.

like image 245
b. e. hollenbeck Avatar asked May 02 '09 01:05

b. e. hollenbeck


People also ask

How do you randomize an element in an array?

Write the function shuffle(array) that shuffles (randomly reorders) elements of the array. Multiple runs of shuffle may lead to different orders of elements. For instance: let arr = [1, 2, 3]; shuffle(arr); // arr = [3, 2, 1] shuffle(arr); // arr = [2, 1, 3] shuffle(arr); // arr = [3, 1, 2] // ...

How do you randomize an element in an array Java?

Use the random() Method to Shuffle an Array in Java This method aims to start from the last element of a given array and keep swapping it with a randomly selected element in the array. We use the Random() function from the random class to randomly pick the indexes of an array.

Can you use math random on array?

random() Let's write a function to return a random element from an array. We can use Math. random() to generate a number between 0–1 (inclusive of 0, but not 1) randomly.


1 Answers

I wrote this a while ago and it so happens to fit what you're looking for. I believe it's the Fisher-Yates shuffle that ojblass refers to:

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
};

Note that modifying Array.prototype may be considered bad form. You might want to implement this as a standalone method that takes the array as an argument. Anyway, to finish it off:

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

Or, if you don't want to actually modify the original:

var randomSubset = originalArray.slice(0).shuffle().slice(0,13);
like image 111
Jeremy Huiskamp Avatar answered Oct 11 '22 22:10

Jeremy Huiskamp