Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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_Jquery_Random - Fatal编程技术网

Javascript 如何生成具有特定间隔的随机数?

Javascript 如何生成具有特定间隔的随机数?,javascript,jquery,random,Javascript,Jquery,Random,我有这个样本: 代码JS: for (var i=0; i < 5; i++) { var number = 1 + Math.floor(Math.random() * 20); console.log(number); } for(变量i=0;ii+2)), 结果=[], 随机的 i=5,j; 而(我--){ random=[…number][Math.floor(Math.random()*numbers.size)]; 结果:推送(随机); 对于(j=random-2;

我有这个样本:

代码JS:

for (var i=0; i < 5; i++) {
  var number = 1 + Math.floor(Math.random() * 20);
  console.log(number);
}
for(变量i=0;i<5;i++){
变量编号=1+数学楼层(数学随机()*20);
控制台日志(编号);
}
我希望生成介于1和20之间的数字,但有以下限制:

  • 数字不应重复
  • 排除第一个和最后一个数字(1,20)
  • 生成的数字之间的差值必须至少为3(例如:4、7、10等)
  • 你能告诉我怎么做吗

    几个简单的例子会对我有所帮助


    谢谢

    您可以保留一个
    集合
    来检查数字是否已经生成,如果已经生成,则使用递归, 同样,为了生成差为3的数字,只需将数字乘以3再除以3即可

    Math.floor(Math.random()*20)
    让generateRandom=(函数(限制){
    设集合=新集合([20]);
    返回函数getRandom(){
    设random=Math.floor(2+Math.floor(Math.random()*20/3)*3);
    if(set.has(random)){
    返回getRandom()
    }否则{
    set.add(随机)
    返回随机数
    };
    }
    })()
    log(数组(5).fill(null).map(generateradom))
    试试这个

    var rendom=[];
    while(rendom.length!=5){
    var number=Math.floor(Math.random()*18)+2;
    让发现=错误;
    rendom.forEach(函数(元素){
    if(元素=(数字-2)){
    发现=真;
    }
    });
    如果(!找到){
    rendom.push(数字);
    }
    }
    
    控制台日志(rendom)您可以选择一个带有可能数字的
    集合,然后选择其中一个数字。然后删除不需要的下限值和上限值。重复以上步骤,直到被通缉的人数

    函数get5(){ var numbers=新集合(数组.from({length:18},(u,i)=>i+2)), 结果=[], 随机的 i=5,j; 而(我--){ random=[…number][Math.floor(Math.random()*numbers.size)]; 结果:推送(随机); 对于(j=random-2;j
    .as console wrapper{max height:100%!important;top:0;}
    “排除第一个和最后一个数字(1,20)”因此,生成的不是1-20而是2-19。“生成的数字之间的差异必须至少为3(例如:4、7、10等)”,这是顺序差异还是总数?例如,序列
    6->9->3
    是否可接受,既然
    9
    3
    之间的区别是
    6
    ,但是
    3
    6
    之间的区别是
    3
    我的例子可以作为一个起点,一起修改,这样我们就可以得到一个可以被其他人使用的例子。可能有更大的数字:3,10,14,20它不必是顺序的,那么像
    [9,17,14,4]
    这样的结果呢?那么第五个值就没有值了。你需要排除1和20,排除第一个和最后一个数字t(1,20)@angle.bonev谢谢,错过了。已更新解决方案。仍将不排除20:([17,2,5,20,11,14]2+数学楼层(19/3)*3=20@angel.bonev更新后,我们可以在过滤器集中默认保留20。当差值为+2和-2,即4时,您不能创建5个最终将进入无限循环的数字。