首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >synchronize.js与特快js连用

synchronize.js与特快js连用
EN

Stack Overflow用户
提问于 2017-12-28 06:52:18
回答 1查看 27关注 0票数 0

我想要在0-3之间生成一个随机数(包括在内),这个数字不应该在产生的数字之前生成,例如,生成的数是1,保存在数组中,然后3,保存在数组中,然后3,哦,哦,它存在于数组中,所以再次生成0,保存在数组中,然后2,最后都按1,3,0,2的顺序保存在数组中。但有时运气不太好,函数返回随机数,然后再与数组中的数字进行比较。这是我迄今尝试过的代码:-

代码语言:javascript
运行
复制
  //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);
  });
}

但是上面的解决方案不起作用,我得到了重复的指数。我也尝试过这个解决方案,用的是解异步:-

代码语言:javascript
运行
复制
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);
  });
}

两者都不起作用--去睡觉时,lol只生成1到2个索引。请帮助我实现我想要的,我在这件事上被困了几个小时。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-28 07:19:02

代码语言:javascript
运行
复制
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())

生成array.This的非重复数字的方法有很多种,但由于您使用的是for循环和var,所以这是一种可行的方法。

代码基本上从数组中删除一个随机元素,将删除的元素分配给另一个newArray,直到原始数组为空。

另外,您不应该在这里放置其他标记同步,因为您关注的是远程随机生成。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48002937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档