2014-02-20 143 views
1

在Python中的JavaScript的数组,如果我想要一个整数的随机排列达到一定规模,我做的:创建随机INTS

random_array = numpy.random.randint(20, size=10) 

在Javascript中,我想不出一个好行路去做这个。我尝试使用UnderscoreJS:

random_array = _.sample(_.range(20), 10); 

我使用JavaScript 1.7数组推导加UnderscoreJS也试过:

random_array = [Math.floor(Math.random() * 20) for (x of _.range(10))]; 

第一个创建唯一的值,第二种方式似乎并没有在所有的工作。有任何想法吗?做这个的最好方式是什么?

+0

我试过'_.sample'版本,它工作正常。 http://jsbin.com/pasif/1/edit – elclanrs

+1

我认为'numpy.random.randint'创建了一组数字,其中每个数字都是从[[0,n]]中统一选择的,是正确的吗?如果是这样,你的JS方法是不正确的:它会创建一个20个值的固定列表,并随机选择其中的10个。 –

+0

是的,我不希望每个值都是唯一的 - 这就是为什么_.sample()不能解决这个问题的原因 – benshope

回答

5

貌似_.times_.random将是有益的:

var random_array = _.times(10, _.random.bind(_, 0, 19)); 

您还可以创建围绕_.random一个微小的辅助函数:

function randomIntFactory(max) { 
    // _.random's max value is *inclusive* (unlike the Python version) 
    // so we subtract one 
    return _.random.bind(_, 0, max - 1); 
} 

var random_array = _.times(10, randomIntFactory(20)); 

注:而不是本地.bind你也可以使用下划线的_.bind

+0

这非常简洁,谢谢! – benshope

+0

不客气! –

2

如果你想只是一个(相当长)的JavaScript的一行,没有下划线/其他库:“任何想法”

var random_array = function(){var a=[]; for(var i=0;i<10;i++){a[i]=Math.floor(Math.random()*20);};return a;}(); 

这是在回答 我不确定这是否是对“最佳方式是什么?”的回答。