2017-01-21 3 views
0

私はそうのようなオブジェクトがあります:私はランダムに自分の財産に関連する値のオフに基づいて、これらのユーザーのいずれかを選択したい値(宝くじ)に基づいてオブジェクトのプロパティをランダムに選択していますか?

{ 
    "user1": 200, 
    "user2": 50, 
    "user3": 250, 
    "user4": 100 
} 

を。したがって、このシナリオでは、user1は勝利の確率は33.33%、user2は8.33%となるはずです。どうすればいい?

+0

コンセプトは「加重乱数」と呼ばれ、議論の質問がたくさんありさコピー/ペーストの準備が整った実装を提供します。つまり、重複した提案としてリンクされています。 –

答えて

1

あなたはただその重量がどこにあるか見つけ、その後、0とNここでNは、すべての重みの和であるとの数を選ぶ:

function selectByWeight(list) { 
    var total = 0; 

    Object.keys(list).forEach(function(k) { 
    total += list[k]; 
    }); 

    var selection = Math.random() * total; 
    var selected; 
    var count = 0; 

    Object.keys(list).forEach(function(k) { 
    count += list[k]; 

    if (count > selection && !selected) { 
     selected = k; 
    } 
    }); 

    return selected; 
} 

var users = { 
    "user1": 200, 
    "user2": 50, 
    "user3": 250, 
    "user4": 100 
} 

console.log(selectByWeight(users)); 
関連する問題