我有一个像这样的对象:

{ 
  "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)); 


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!