Home  >  Q&A  >  body text

js 生成范围内不重复的随机数。

我的需求
在 0 - 3 之间(包含0与3)生成 2 个不重复的随机数。

我的方案
我没有使用do while的方案来做...

function randomNumbers($range){
    return $range[0] + Math.round(Math.random() * ($range[1] -  $range[0]));
}

// 生成随机数字
function generatedRandomNumbers($length,$range){
    var _randomNumber = randomNumbers($range),
        _array = [];
                    
    for(var i = 0;i < $length;i++){
        if(~_array.indexOf(_randomNumber)){
            _randomNumber = randomNumbers($range);
        }
        _array[i] = _randomNumber;
    }
    console.log(JSON.stringify(_array));
};


高洛峰高洛峰2875 days ago1015

reply all(4)I'll reply

  • 欧阳克

    欧阳克2016-11-11 15:37:09

    function randomNum(min, max) {
      return min + Math.round(Math.random() * (max - min));
    }
    
    function random2() {
      var rdm1 = randomNum(0, 3);
      var rdm2 = randomNum(0, 3);
    
      if(rdm1 === rdm2) {
        return random2();
      }
      
      return [rdm1, rdm2];
    }


    reply
    0
  • 三叔

    三叔2016-11-11 15:36:58

    [0,1,2,3].sort(function(){return Math.random() > 0.5}).slice(0,2)


    reply
    0
  • 欧阳克

    欧阳克2016-11-11 15:36:49

    昨天也看到了一个类似的问题,处理的不是很好,但是可以得到结果。

    var x, y, arr=[];
    for(x=0; x<4; x++) {
        for(y=0; y<4; y++) {
            if(x!=y) {
                
                var num = x == 0 ? ((x*10).toString() + y) : x*10 + y;
                arr.push(num);
            }
        }
    }
    console.log(arr.length, arr);


    reply
    0
  • 三叔

    三叔2016-11-11 15:36:20


    你这个是小范围的,所以很简单,一句话

    [0,1,2,3].sort(() => Math.random() - 0.5).slice(0,2)


    reply
    0
  • Cancelreply