Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 生成唯一随机数_Javascript - Fatal编程技术网

Javascript 生成唯一随机数

Javascript 生成唯一随机数,javascript,Javascript,所以我用6个随机生成的数字进行javascript抽奖。有人知道如何防止这些数字相同吗 谢谢 代码: “严格使用”; 函数generatenumbers(){ 设数=[]; 让我; i=0; 对于(i=0;i创建随机数时,仅使用尚未在数组中的一个: var编号=[]; for(i=0;irandom()函数随机生成一个数字,因此有可能再次出现一个数字。为了避免在random()生成一个新数字后出现这种情况函数您可以检查此数字是否已存在于数组中。仅当该数字尚未存在时才将其添加到数组中。下面提供了

所以我用6个随机生成的数字进行javascript抽奖。有人知道如何防止这些数字相同吗

谢谢

代码:

“严格使用”;
函数generatenumbers(){
设数=[];
让我;
i=0;

对于(i=0;i创建随机数时,仅使用尚未在数组中的一个:

var编号=[];
for(i=0;irandom()函数随机生成一个数字,因此有可能再次出现一个数字。为了避免在random()生成一个新数字后出现这种情况函数您可以检查此数字是否已存在于数组中。仅当该数字尚未存在时才将其添加到数组中。下面提供了一个工作片段:

function generatenumbers(){
   var number = new Array();
   var i=0;
   while(i<6){
   var val = Math.floor(Math.random()*40);
   if(number.includes(val) === false){
      number.push(val);
      i++;
     }
   }
   document.getElementById("generated").innerHTML = "";
   i = 0;
   for(i=0; i<= number.length - 1; i++){
      let node = document.createElement("LI");
      let txt = document.createTextNode(number[i]);
      node.appendChild(txt);
      document.getElementById("generated").appendChild(node);
   }
}
函数generatenumbers(){
var number=新数组();
var i=0;

while(iYeah,但我不知道如何在上面的代码中实现它。这段代码正确吗,因为它会给while循环一个错误?我测试了这段代码,它工作了。循环只是没有主体,这(虽然不常见)是完全合法的。出于某种原因,如果我实现这段代码,数字不会添加到列表中(代码中循环的第二位)main.js:16 Uncaught TypeError:无法在HtmlanchoreElement.onclick(VM36 index.html:21)的generatenumbers(main.js:16)处读取null的属性'appendChild',虽然这种方法(通常)可以从40中获得6个唯一,但对于从Y中获得N个唯一的一般问题来说,这不是一种好方法(例如,为一组52张卡片生成随机订单)。这不是一个好的通用方法的原因是,当N接近Y时,该算法平均需要越来越长的时间才能获得每个额外的唯一数。鉴于选择使用哪个数的数是随机的,因此存在随机数序列,这导致该算法需要无限的时间,即使在t他在40个案例中有6个是独一无二的(即使可能性不大).你能把它改得更适合我上面的代码吗?@thr当然可以给我一点建议minute@thr我已经更新了,请你检查一下。老兄,你是一个传奇人物。你有没有可能知道这个代码的getElementByID的替代品?@halfer即使我是新来的,所以你提出了一个合理的观点。从下一次开始,我会记住这一点。
<body>
<div id="container" class="cf">
    <header>
        <h1>Hipster Powered Lottery</h1>

    </header>

    <section>
        <h2>Play with our wonderful lottery est. 1831</h2>
        <a href="#" id="generate" onclick="generatenumbers()">Generate my numbers!</a>
        <ul id="generated"></ul>

    </section>
    <aside>
        <h2>Previously generated set</h2>
        <ul id="previous"></ul>

    </aside>
</div>
</body>
function generatenumbers(){
   var number = new Array();
   var i=0;
   while(i<6){
   var val = Math.floor(Math.random()*40);
   if(number.includes(val) === false){
      number.push(val);
      i++;
     }
   }
   document.getElementById("generated").innerHTML = "";
   i = 0;
   for(i=0; i<= number.length - 1; i++){
      let node = document.createElement("LI");
      let txt = document.createTextNode(number[i]);
      node.appendChild(txt);
      document.getElementById("generated").appendChild(node);
   }
}