У меня есть массив с объектами, например:
`[{
id: 1,
int: 300
}, {
id: 333,
int: 1000
}, {
id: 672,
int: 5000
}]`
Хочется сделать рандом по этому массиву, но у тех, у кого больше параметр int, у того и выше шанс, чем у остальных.
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 до полученной суммы.
Далее, во втором цикле вновь складываем вероятности, пока их сумма не окажется равной или меньше выбранного случайного числа.
Суть в том что мы даём больший процент стать победителем, для для пользователей у кого группа (значение 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 + "% случаев");
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Доброго времени суток, друзьяИзучал Javascript и столкнулся с такой проблемой - код для подсчета простых чисел в фоновом режиме не работает