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

时间:2018-10-18 18:12:41

标签: javascript random

我正在制作一个随机票证生成器,该生成器会询问范围,当按下按钮时会生成该数字范围内的随机数。 代码缺少重要部分:生成的数字无法重复。 Math.random 中使用列表可能也是错误的。

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>

2 个答案:

答案 0 :(得分:0)

如果支持较新的语法或使用babel,请使用Set,例如const numbers = new Set();,然后将每个生成的数字添加到集合中。该集合将起作用,以便每个项目都是唯一的。

您还可以找到一种ES5方式进行设置。

答案 1 :(得分:0)

这可能不是最好的方法,因为它使用递归,但它可以工作。它会获得一个随机数,并将其添加到已用数字列表中,确保不返回已用数字数组中的数字。

有很多方法可以做到这一点,这只是其中之一。

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())
}

这是另一种基于@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())
}