2013-09-28 79 views
0

我想用自定義寬度隨機化我的列表。爲此,我在1 and 2之間編寫了簡單的JavaScript代碼片段生成數字。隨機數與比例

功能如下:

randomizePortfolio: function() { 
    $('ul.works').children('li').each(function() { 
     var Random = Math.floor(Math.random() * 2) + 1, 
      words = 'normal'; 
     if(Random == '2') { 
      words = 'wide'; 
     } 

     $(this).addClass('col-md-'+3*Random+' col-sm-'+3*Random+' '+words); 
    }); 

    $('ul.works').masonry({ 
     itemSelector: 'li' 
    }); 
} 

問題是,我想有更大的比率爲1。現在它 - 明顯 - 隨機的,所以有時我會得到所有2的,其他時間 - 所有1的。我如何添加比例(比方說3:1)?

回答

3

爲了得到一個3:您可以創建你想要的數字數組1的分佈,並添加三個1和一個2,而隨機指數:

var rvalues = [1,1,1,2]; 
var Random = rvalues[Math.floor(Math.random() * rvalues.length)]; 

這裏是基於另一種等價的,方法對時間的3/4的隨機值小於3/4的事實:

var Random: 
if (Math.random() < .75) Random = 1; 
else Random = 2; 
+0

謝謝,很好。但現在我有另一個問題 - 我得到了兩個'2'連續。任何想法阻止這種情況發生? –

+0

如果您不希望發生這種情況,請檢查前面的數字是否爲2,如果是,則返回1。否則獲得2的概率是25%,與之前的數量無關。 – Joni

+0

這並不容易:)如果我連續得到兩個'2',我就會得到'2 1 2 1'這樣的問題,這也是一個問題(因爲行只有4個元素寬)。如果我開始接觸prev和next,恐怕根本就沒有'2'。 –

0

另一種方式,我使用,這可能讓它爲你:

// here's the value we wanna get by ratio (where v is value and r is ratio) 
 
// r is an array with min and max value, this example is based on a 100% ratio 
 
const ratioValues = [ 
 
    {v: 1, r: [0,75]}, // 75% chance to get 1 
 
    {v: 2, r: [76,100]} // 25% chance to get 2 
 
]; 
 
//actual function to get our value 
 
function getRandByRatio(ratioValues) { 
 
    // idx is a random integer between 0 and 100 
 
    let idx = Math.floor(Math.random() * (100 + 1)); 
 
    for (let item of ratioValues) { 
 
    // test if idx is within the r range 
 
    if (idx >= item.r[0] && idx <= item.r[1]) { 
 
     //if it is return our value 
 
     return item.v; 
 
    } 
 
    } 
 
}; 
 

 
// let's make a testing function 
 
function makeTest(nb) { 
 
    const ul = document.getElementById("rand-value"); 
 
    for (let i = 0; i < nb; i++) { 
 
    ul.innerHTML += "<li>" + getRandByRatio(ratioValues) + "</li>"; 
 
    } 
 
}; 
 

 
makeTest(10);
<ul id="rand-value"></ul>

,而這可能是相當多的只是2值的代碼,我覺得它更容易閱讀和維護。(和它的偉大的,當你有更多的價值!)

希望這可以是有用的! :)