2016-05-07 11 views
0

配列内にいくつかの要素があり、それらのうちのいくつかを他の配列よりも選択しやすくする必要があります。このjsfiddleの例では、単純な配列と関数を作って、特定の要素を他の要素よりもはるかに大きく選択できるようにしました。しかし、私が使用した配列は5要素しか持たなかったので非常に小さかった。私は約50程度の要素を使うことを考えています。このMath.random配列要素を別の配列要素よりも選択しやすくする方法

"job":["Teacher", "Doctor","Nurse","Unemployed","Engineer","Mechanic", "Welder", "Cashier","Police Officer","Waiter","Cook", 
     "Security Guard", "Construction Worker","Truck Driver","Accountant","Carpenter","Operations Manager","Lawyer","Electrician", 
     "Bartender","Lawnman"] 

同様

だから私は、配列要素の皆のためであればまたは他のif文を作るための時間を持っていません。これを行うにはよりよい方法が必要ですか?

+1

確率ベースの)ランダム – DarkBee

+0

'Math.random'配列要素をランダムにしたくないのですか? :P –

答えて

4

私はいくつかの変更を加えてjsbinを作成しました。私はそれがうまくいくことを望んで、あなたが望むようにリストを拡張することができます。あなたは(http://codetheory.in/weighted-biased-random-number-generation-with-javascript- [加重]を作成したい

http://jsbin.com/muwejehete/edit?html,js,output

// first create a list options with respective weight or likelyhood 
var myarr = [{ 
    load: 1, 
    name: "nothing, because you are broke" 
    }, { 
    load: 5, 
    name: "1000 dollars" 
    }, { 
    load: 2, 
    name: "10,000 dollars" 
    }, { 
    load: 4, 
    name: "100,000 dollars" 
    }, { 
    load: 7, 
    name: "a million dollars" 
}]; 
// create another array to store final options 
var list = []; 
// repeat an option as amny times as given by weight 
myarr.forEach(function(item) { 
    for (var i = 1; i < item.load; i++) { 
    list.push(item.name); 
    } 
}); 

// Now shuffle the options because same options are together in array, I want to separate them for better randomization. 
list = shuffle(list); 


document.getElementById('btn').onclick = function() { 
    // pick an index from options list 
    var num = Math.floor(Math.random() * list.length); 
    document.getElementById("result").innerHTML = "You are worth " +  list[num]; 
}; 

https://stackoverflow.com/a/6274398/5567387

function shuffle(array) { 
    var counter = array.length; 

    // While there are elements in the array 
    while (counter > 0) { 
    // Pick a random index 
    var index = Math.floor(Math.random() * counter); 

    // Decrease counter by 1 
    counter--; 

    // And swap the last element with it 
    var temp = array[counter]; 
    array[counter] = array[index]; 
    array[index] = temp; 
    } 

    return array; 
} 
+0

あなたのコードを_explain_できますか? –

+0

ok、私はコード –

+1

をコメントさせてくださいあなたが提案されたソリューションの_explanation_を書いた方が良いでしょう。答えの中のテキストとして、Y'know。これが私たちがここで行うことなので。 –

関連する問題