簡體   English   中英

javascript:從范圍生成2個隨機但不同的數字

[英]javascript: generate 2 random but distinct numbers from range

快速提問:

實現這行python代碼的最佳方法是什么(在給定范圍內生成兩個隨機但不同的數字)...

random.sample(xrange(10), 2)

...使用Javascript?

提前致謝!

馬丁

這是我使用拼接的嘗試:

var a = [1,2,3,4,5,6,7,8,9,10];var sample = [];
sample.push(a.splice(Math.random()*a.length,1));
sample.push(a.splice(Math.random()*a.length,1));

包裝功能:

function sample_range(range, n) {
  var sample = [];
  for(var i=0; i<n; i++) {
    sample.push(range.splice(Math.random()*range.length,1));
  }

  return sample;
}

var sample = sample_range([1,2,3,4,5,6,7,8,9,10], 2);

我們還可以將函數粘貼到Array.prototype中,使其具有點標記法語法:

Array.prototype.sample_range = function(n) {
    var sample = [];
    for(var i=0;i<n;i++) {
      sample.push(this.splice(Math.random()*this.length,1));
    }
    return sample;
};
var sample = [1,2,3,4,5,6,7,8,9,10].sample_range(2);

如果要0和之間產生隨機數n ,一種方法是隨機選擇數r10..n然后挑r20..n-1並添加1〜 r2如果r2 >= r1

function sample(range,tot){
    if(tot > range){
        alert('infinite loop?');
        return [];
    }
    var myRandomNumbers = [];
    for(var i = 0; i<tot; i++){
        var randN = Math.floor(Math.random()*range);
        while(myRandomNumbers.contains(randN)){
            randN = Math.floor(Math.random()*range);
        }
        myRandomNumbers.push(randN);
    }
    return myRandomNumbers
}

var nums = sample(10,2); //array containing 2 distinct random numbers

生成一個,然后重復生成第二個,直到與第一個不同。 它將不得不運行更長的時間,但是除非您需要生成數十億個數字,否則您不會看到任何性能下降。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM