简体   繁体   English

使用输入的Javascript随机数生成器(每个数字生成一次)

[英]Javascript random number generator (generates every number once) using input

I am making a random ticket generator which asks range and when pressing button generates a random number in the range of that number. 我正在制作一个随机票证生成器,它会询问范围,当按下按钮时会在该数字范围内生成一个随机数。 The code is missing an important part: generated numbers can't repeat. 代码缺少重要部分:生成的数字无法重复。 Probably the use of list in Math.random is also false. Math.random中使用list可能也是错误的。

 function random_number() { var list = []; var range = document.getElementById('range').value; for (var i = 1; i <= range; i++) { list.push(i); } var random = Math.floor(Math.random(list) * range) + 1; if (document.getElementById('display').innerText = random) {} } 
 <input id="range" type="text"> <br/> <button onclick="random_number()" "delete_number()" class="button"> <span id="display"></span> </button> 

If supporting newer syntax or using babel, use a Set , like const numbers = new Set(); 如果支持较新的语法或使用babel,请使用Set ,例如const numbers = new Set(); And add each generated number to a the set. 并将每个生成的数字添加到集合中。 The set will work so that each item is unique. 该集合将起作用,以便每个项目都是唯一的。

You can also find an es5 way to make a set. 您还可以找到es5进行设置的方法。

This may not be the best method as it uses recursion, but it works. 这可能不是最好的方法,因为它使用了递归,但它可以工作。 It gets a random number and adds it to a list of used numbers, making sure not to return a number that is in the array of already used numbers. 它获取一个随机数,并将其添加到已用数字列表中,确保不返回已用数字数组中的数字。

There are plenty of ways to do this, this is just one of them. 有很多方法可以做到这一点,这只是其中之一。

 var usedNumbers = [] var randomNumber = function () { var range = 10 // If the list of used numbers is the same as the range, we have gone // through all numbers if (usedNumbers.length === range) { console.error('Max numbers reached') return false } var list = [] for (var i = 1; i <= range; i++) { list.push(i); } var random = Math.floor(Math.random(list) * range) + 1 // If the number appears in the list of used numbers, re-run the function if (usedNumbers.indexOf(random) != -1) { return randomNumber() } // add the number to the list usedNumbers.push(random) return random } // Get a random number 11 times (last one will return false) for (var i = 0; i <= 10; i++) { console.log(randomNumber()) } 

Here's another method based on @Wainage comment of creating an array and popping the number off it. 这是基于@Wainage注释的另一种方法,它创建一个数组并从中弹出数字。

 var upperLimit = 10 var range = [] // Add the range of numbers to the array for (var i = 1; i <= upperLimit; i++) { range.push(i) } var randomNumber = function () { // pick a random number from the array var random = range[Math.floor(Math.random() * range.length)] // remove it from the array range.splice(range.indexOf(random), 1) return random } // Call a random number 15 times // If no number, it will return undefined for(var i = 0; i < 15; i++) { console.log(randomNumber()) } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM