我想生成0-3(包括)之间的随机数,并且不应该在例如0到3之间生成该数字。生成的数字为1,保存在数组中,然后3,保存在数组中,然后再次3,哦 - 哦它存在于数组中,因此再次生成0,保存在数组中,然后2,最后所有都保存在数组中大约1,3,0,2。但有时幸运不在我身边,函数返回随机数,然后再与数组中的数字进行比较。这是我到目前为止尝试的代码: -
//using synchronized.js
function f1(choices){
sync.fiber(function(){
var options = { //rand for a choice
min: 0,
max: 3, //choice can be from 0-3 index
integer: true
};
var randomnumber=rn(options); //random number for choice placement here
for(var i=0;i<choices.length;i++){
if(randomnumber==choices[i]){ //if exists, generate the number again
console.log("rnd generated is: ",randomnumber);
randomnumber=rn(options);
i=0;
}
}
console.log("rnd got is: ", randomnumber);
choices[choices.length]=randomnumber;
return randomnumber;
}, function(err,result){
console.log("sync index is: ",result);
});
}
但上述解决方案无效,即我正在重复索引。我也使用deasync尝试了这个解决方案: -
function randomChoiceNumber(choices){
var flag=true;
var count=0;
return new Promise(function(resolve,reject){
var options = { //rand for a choice
min: 0,
max: 3, //choice can be from 0-3 index
integer: true
};
var randomnumber=rn(options); //random number for choice placement here
for(var i=0;i<choices.length;i++){
if(randomnumber==choices[i]){ //if exists, generate the number again
flag=false;
randomnumber=rn(options);
i=0;
count=0;
}else{
count++;
}
}
while(count != choices.length && choices.length>0) {
deasync.sleep(100);
}
choices[choices.length]=randomnumber;
resolve(randomnumber);
});
}
两个都没有工作deasync一个人去睡觉lol只生成1到2个索引。请帮助我实现我想要的东西,我坚持这件事几个小时。谢谢。
答案 0 :(得分:1)
function getRand(){
var array=[0,1,2,3]
var newArray=[];
var times=array.length;
for(var i=0;i<times;i++){
var ran=~~(array.length*Math.random());
newArray[i]=array.splice(ran,1)[0]
}
return newArray
}
console.log(getRand())
有很多方法可以生成非重复数组的数组。这不是最好的方法,但由于你使用的是for循环和var,它可以起作用。
代码基本上从数组中删除一个随机元素,将删除的一个元素分配到另一个newArray中,直到原始数组为空。
此外,你不应该在这里放置其他标签同步,因为你专注于远程随机生成。