我有一个像这样的对象:
{
"user1": 200,
"user2": 50,
"user3": 250,
"user4": 100
}
我想根据与他们的属性(property)相关的值(value)随机选择这些用户之一。因此,在这种情况下,user1 应该有 33.33% 的获胜机会,user2 应该有 8.33% 的获胜机会,依此类推。我怎样才能做到这一点?
请您参考如下方法:
您只需选择 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));