如果javascript中的值相同,如何再次使用math.random获取不同的值

如果javascript中的值相同,如何再次使用math.random获取不同的值,javascript,math,random,Javascript,Math,Random,我试图从前面的math.random值中获取一个不同的值,因此当数字写入文档时,如果它们相同,则math.random将生成另一个不相同的数字。它可能需要不断生成,直到值不同为止 function rands() { return Math.floor(Math.random() * 20) + 1; } var rand1 = rands(); var rand2 = rands(); var rand3 = rands(); var rand4 = rands(); var rand

我试图从前面的math.random值中获取一个不同的值,因此当数字写入文档时,如果它们相同,则math.random将生成另一个不相同的数字。它可能需要不断生成,直到值不同为止

function rands() {
  return Math.floor(Math.random() * 20) + 1;
}

var rand1 = rands();
var rand2 = rands();
var rand3 = rands();
var rand4 = rands();
var rand = [];

function myFunction() {
  document.getElementById("random1").value = rand1;
  document.getElementById("random2").value = rand2;
  document.getElementById("random3").value = rand3;
  document.getElementById("random4").value = rand4;

  if(rand1 == rand2 || rand1==rand3 || rand1==rand4 || rand2 == rand3 || rand2 == rand4 || rand3==rand4){
  console.log("Duplicate");

    }
}

myFunction()

您可以重写
rands
函数以查找已使用的值:

function rands(used) {
    let r;
    do {
        r = Math.floor(Math.random() * 20) + 1;
    } while (used.indexOf(r) >= 0);
    return r;
}

var rand = [];
for (let i = 0; i < 4; i++) rand[i] = rands(rand);
函数随机数(已使用){
让r;
做{
r=数学地板(数学随机()*20)+1;
}while(used.indexOf(r)>=0);
返回r;
}
var rand=[];
对于(设i=0;i<4;i++)rand[i]=rands(rand);

您可以重写
rands
函数以查找已使用的值:

function rands(used) {
    let r;
    do {
        r = Math.floor(Math.random() * 20) + 1;
    } while (used.indexOf(r) >= 0);
    return r;
}

var rand = [];
for (let i = 0; i < 4; i++) rand[i] = rands(rand);
函数随机数(已使用){
让r;
做{
r=数学地板(数学随机()*20)+1;
}while(used.indexOf(r)>=0);
返回r;
}
var rand=[];
对于(设i=0;i<4;i++)rand[i]=rands(rand);

如果要保证唯一性,可以从数组中拼接随机索引。这将节省在发生冲突时重复调用函数的工作量:

function rand\u maker(长度){
设arr=Array.from({length:length},(u,i)=>i+1)
return()=>{
让index=Math.floor(Math.random()*arr.length)
返回阵列拼接(索引,1)[0];
}
}
设rands=rand_maker(20)
console.log(rands())
console.log(rands())
console.log(rands())

log(rands())
如果要保证唯一性,可以从数组中拼接随机索引。这将节省在发生冲突时重复调用函数的工作量:

function rand\u maker(长度){
设arr=Array.from({length:length},(u,i)=>i+1)
return()=>{
让index=Math.floor(Math.random()*arr.length)
返回阵列拼接(索引,1)[0];
}
}
设rands=rand_maker(20)
console.log(rands())
console.log(rands())
console.log(rands())

console.log(rands())
当您复制代码时,应该始终考虑使用数组。当您复制代码时,应该始终考虑使用数组。