I am trying to choose random unique numbers everytime when I click button. For this my function is:
JavaScript
x
9
1
const chooseNumber = () => {
2
var r = Math.floor(Math.random() * 75) + 1;
3
console.log(r)
4
while(selectedNumbers.indexOf(r) === -1) {
5
selectedNumbers.push(r);
6
}
7
console.log(selectedNumbers);
8
};
9
But the problem is if the random number is already on my list, I need to click the button again to generate new number and it goes until it find the number which is not on the list. But I want to generate number which is not on the list directly so I dont need to click the button everytime. Thanks for you helps.
Advertisement
Answer
You are in a right track, except the while
loop should be for random number generator, not pushing number into an array:
JavaScript
1
11
11
1
const selectedNumbers = [];
2
const chooseNumber = () => {
3
let r;
4
do
5
{
6
r = Math.floor(Math.random() * 75) + 1;
7
}
8
while(selectedNumbers.indexOf(r) > -1)
9
selectedNumbers.push(r);
10
console.log(r, "["+selectedNumbers+"]");
11
};
JavaScript
1
1
1
<button onclick="chooseNumber()">Generate</button>
Note, that this might eventually lead to a freeze, since there is no fail safe check if array is full, so to battle that we should also check length of the array:
JavaScript
1
22
22
1
const selectedNumbers = [];
2
const maxNumber = 75;
3
const chooseNumber = () => {
4
let r;
5
do
6
{
7
r = ~~(Math.random() * maxNumber) + 1;
8
}
9
while(selectedNumbers.indexOf(r) > -1 && selectedNumbers.length < maxNumber)
10
if (selectedNumbers.length < maxNumber)
11
selectedNumbers.push(r);
12
else
13
console.log("array is full");
14
15
console.log(r, "["+selectedNumbers+"]");
16
};
17
18
19
for(let i = 0; i < 76; i++)
20
{
21
chooseNumber();
22
}
JavaScript
1
1
1
<button onclick="chooseNumber()">Generate</button>