|
Hi,
I want to generate random numbers in js from specific set of numbers iteratively e.g:
generate random numbers from array of (2,3,4) excluding 1 and next time from (1,3,4) excluding 2 like that. I have used Math.floor and Math.random()but they generate the numbers from given range like(1 to 4). What if i want to exclude any number or want to generate number from given specific set of numbers??
|
|
|
|
|
aeman wrote: want to generate number from given specific set of numbers
What's the problem with generating random number within a range, see if the random number is not the one you want and then re-get the random number in case it's the one you wanted to avoid?
Example;
Random number between 1 to 4.
You wanted one of (1,3,4)
If random number returned is 2, ignore and re-get it.
Define a method that takes range start, end and exclude number:
function getRandom(rangeStart, rangeEnd, excludeNo)
{
var ranNo = GetRandom(rangeStart, rangeEnd);
if(ranNo == excludeNo)
getRandom(rangeStart, rangeEnd, excludeNo);
return ranNo;
}
|
|
|
|
|
Using your example, I would generate a random number between 0 and 2. Then use the result as an index to your three element array.
|
|
|
|
|
If you need to use this often for arrays, I would add a function to the array prototype:
Array.prototype.randomPick = function(){
var M = this.length-1;
var N = 0;
var randomIndex = Math.floor(Math.random()*(1+M-N))+N;
return this[randomIndex];
};
Then you can call it:
var arr = [2,3,4,5,4,6,8,9,7];
alert(arr.randomPick());
________
John Y.
Developer
|
|
|
|