Рандом по массиву с шансами

235
06 февраля 2018, 11:17

У меня есть массив с объектами, например:

`[{
  id: 1,
  int: 300
}, {
  id: 333,
  int: 1000
}, {
  id: 672,
  int: 5000
}]`

Хочется сделать рандом по этому массиву, но у тех, у кого больше параметр int, у того и выше шанс, чем у остальных.

Answer 1

let a = [{id: 1, int: 300}, {id: 333, int: 1000}, {id: 672, int: 5000}]; 
 
let sum = 0; 
for (let i = 0; i < a.length; i++) { 
  sum += a[i].int; 
} 
 
let rand = Math.floor(Math.random() * sum); 
 
let i = 0; 
for (let s = a[0].int; s <= rand; s += a[i].int) { 
  i++; 
} 
 
console.log(a[i].id);

Сначала суммируем вероятности выпадения (первый цикл), затем выбираем случайное число от 0 до полученной суммы.
Далее, во втором цикле вновь складываем вероятности, пока их сумма не окажется равной или меньше выбранного случайного числа.

Answer 2

Суть в том что мы даём больший процент стать победителем, для для пользователей у кого группа (значение int) выше чем у других, но ставим границы для определения более привилегированных пользователей.

Надеюсь хоть чем-то помогу:

var winner70 = 0; 
var winner30 = 0; 
var winner10 = 0; 
var arr = new Array(); 
arr.push({id: 1, int: 300}); 
arr.push({id: 333, int: 1000}); 
arr.push({id: 672, int: 5000}); 
var k = 0; 
while (k != 100) { 
    for (var i = 0; i < arr.length; i++) { 
        var rand = Math.floor(Math.random() * 101); 
        if (rand < 70 && arr[i].int>= 5000) {// 70% chance to win 
            winner70++; 
        } 
        if (rand < 30 && arr[i].int>= 1000 && arr[i].int< 5000) {// 30% chance to win 
            winner30++; 
        } 
        if (rand < 10 && arr[i].int>= 300 && arr[i].int< 1000) {// 10% chance to win 
            winner10++; 
        } 
    } 
    k++; 
} 
console.log("winner70 выиграл в " + winner70 + "% случаев"); 
console.log("winner30 выиграл в " + winner30 + "% случаев"); 
console.log("winner10 выиграл в " + winner10 + "% случаев");

READ ALSO
Не работает Worker на Javascript

Не работает Worker на Javascript

Доброго времени суток, друзьяИзучал Javascript и столкнулся с такой проблемой - код для подсчета простых чисел в фоновом режиме не работает

369
Проверка Инпута на пустоту JavaScript [дубликат]

Проверка Инпута на пустоту JavaScript [дубликат]

На данный вопрос уже ответили:

245