2017-01-21 2 views
0

У меня есть объект, как так:Произвольно выбирает свойство объекта, основанное на его стоимости (лотерее)?

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

Я хочу, чтобы случайно выбрать один из этих пользователей на основе от стоимости, связанной с их собственностью. Таким образом, в этом случае пользователь1 должен иметь вероятность выигрыша в 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)); 

 Смежные вопросы

  • Нет связанных вопросов^_^