admin管理员组

文章数量:1399313

quick question:

What is the best way for implementing this line of python code (generates two random but distinct numbers from a given range)...

random.sample(xrange(10), 2)

...in Javascript?

Thanks in advance!

Martin

quick question:

What is the best way for implementing this line of python code (generates two random but distinct numbers from a given range)...

random.sample(xrange(10), 2)

...in Javascript?

Thanks in advance!

Martin

Share Improve this question asked Feb 9, 2011 at 14:53 HoffHoff 39.9k17 gold badges83 silver badges104 bronze badges
Add a ment  | 

4 Answers 4

Reset to default 5

Here is my attempt using splice:

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));

Wrapped in a function:

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);

We could also stick the function into Array.prototype to have something like dot notation syntax:

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);

If you want to generate random numbers between 0 and n, one way is to randomly pick number r1 in 0..n then pick r2 from 0..n-1 and add 1 to r2 if 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

Generate one, then repeatedly generate the second until it's not the same as the first. Tiny chance it will have to run longer, but you won't see any performance hit unless you need to generate billions of numbers.

本文标签: javascript generate 2 random but distinct numbers from rangeStack Overflow