# Generate unique random numbers between 1 and 100

How can I generate some **unique random** numbers between 1 and 100 using JavaScript?

## First answer

For example: To generate 8 unique random numbers and store them to an array, you can simply do this:

```
var arr = []
while(arr.length < 8){
var r = Math.floor(Math.random()*100) + 1;
if(arr.indexOf(r) === -1) arr.push(r);
}
document.write(arr);
```

## Second answer

Generate **permutation** of 100 numbers and then choose serially.

Use **Knuth Shuffle(aka the Fisher-Yates shuffle) Algorithm**.

**JavaScript:**

```
function fisherYates ( myArray,stop_count ) {
var i = myArray.length;
if ( i == 0 ) return false;
int c = 0;
while ( --i ) {
var j = Math.floor( Math.random() * ( i + 1 ) );
var tempi = myArray[i];
var tempj = myArray[j];
myArray[i] = tempj;
myArray[j] = tempi;
// Edited thanks to Frerich Raabe
c++;
if(c == stop_count)return;
}
}
```

**EDIT**:

Improved code:

```
function fisherYates(myArray,nb_picks)
{
for (i = myArray.length-1; i > 1 ; i--)
{
var r = Math.floor(Math.random()*i);
var t = myArray[i];
myArray[i] = myArray[r];
myArray[r] = t;
}
return myArray.slice(0,nb_picks);
}
```

Potential problem:

Suppose we have array of 100 numbers {e.g. [1,2,3…100]} and we stop swapping after 8 swaps;

then most of the times array will look like {1,2,3,76,5,6,7,8,…numbers here will be shuffled …10}.

Because every number will be swapped with probability 1/100 so

prob. of swapping first 8 numbers is 8/100 whereas prob. of swapping other 92 is 92/100.

But if we run algorithm for full array then we are sure (almost)every entry is swapped.

Otherwise we face a question : which 8 numbers to choose?

## Third answer

The above techniques are good if you want to avoid a library, but depending if you would be alright with a library, I would suggest checking out Chance for generating random stuff in JavaScript.

Specifically to solve your question, using Chance it’s as easy as:

```
// One line!
var uniques = chance.unique(chance.natural, 8, {min: 1, max: 100});
// Print it out to the document for this snippet so we can see it in action
document.write(JSON.stringify(uniques));
```

`<script src="http://chancejs.com/chance.min.js"></script>`

*Disclaimer, as the author of Chance, I am a bit biased ðŸ˜‰*