I'm trying to get 8 random numbers between 1-80 and put them into specified divs.
var numbers = [] var luckyNumber; var x = 1; while (x < 8) { luckyNumber = Math.floor(Math.random() * 80 + 1); if (numbers.indexOf(luckyNumber) == -1) { for (var i = 1; i < 9; i++) { document.getElementById('k' + i).innerHTML = numbers[i] } numbers.push(luckyNumber); x++; } } document.write(numbers);
<div id="k1">K1</div> <div id="k2">K2</div> <div id="k3">K3</div> <div id="k4">K4</div> <div id="k5">K5</div> <div id="k6">K6</div> <div id="k7">K7</div> <div id="k8">K8</div>
The last 2 numbers are shown undefined in HTML result. But if you check the numbers with document.write you can see the last two numbers. How can I solve this problem?
Your looping logic seems to be incorrect. You should fill numbers array first and then update the html.
var numbers = [] var luckyNumber; var x = 1; while (x < 9) { luckyNumber = Math.floor(Math.random() * 80 + 1); if (numbers.indexOf(luckyNumber) == -1) { numbers.push(luckyNumber); x++; } } for (var i = 1; i < 9; i++) { document.getElementById('k' + i).innerHTML = numbers[i-1] } document.write(numbers);
<div id="k1">K1</div> <div id="k2">K2</div> <div id="k3">K3</div> <div id="k4">K4</div> <div id="k5">K5</div> <div id="k6">K6</div> <div id="k7">K7</div> <div id="k8">K8</div>
The simplest fix is to fix the while loop, remove the for loop and use x
to find the div where to display the latest number.
var numbers = [] var luckyNumber; var x = 1; while (x <= 8) { luckyNumber = Math.floor(Math.random() * 80 + 1); if (numbers.indexOf(luckyNumber) == -1) { document.getElementById('k' + x).innerHTML = luckyNumber; numbers.push(luckyNumber); x++; } } document.write(numbers);
<div id="k1">K1</div> <div id="k2">K2</div> <div id="k3">K3</div> <div id="k4">K4</div> <div id="k5">K5</div> <div id="k6">K6</div> <div id="k7">K7</div> <div id="k8">K8</div>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.