我有一个像这样的物体:
{
"user1": 200,
"user2": 50,
"user3": 250,
"user4": 100
}我希望根据与其属性相关的值随机选择这些用户中的一个。因此,在这种情况下,user1应该有33.33%的机会获胜,user2应该有8.33%的机会,等等。我怎么能这么做?
发布于 2017-01-21 03:00:14
您只需在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));https://stackoverflow.com/questions/41775273
复制相似问题