2014-02-20 277 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;}(); 

這是在回答 我不確定這是否是對「最佳方式是什麼?」的回答。