Proponuję utworzyć dla każdego uczestnika tablicę zawierająca jego ID tyle razy ile ma szans (TICKETS)
for (PARTICIPANT of _PARTICIPANTS)
const tickets_per_participant = new Array(PARTICIPANT.TICKETS).fill(PARTICIPANT.ID);
w kolejnym kroku dodawać tę tablicę szans dla każdego użytkownika do tablicy losowań
let draw_pool = [];
for (PARTICIPANT of _PARTICIPANTS) {
const tickets_per_participant = new Array(PARTICIPANT.TICKETS).fill(PARTICIPANT.ID);
draw_pool = [...draw_pool, ...tickets_per_participant];
}
na podstawie danych z Twojego przykładu tablica losowań będzie wyglądać tak
[
1, // TICKETS: 1
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // TICKETS: 33
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, // 55
4,4,4,4,4,4,4,4,4,4,4 // TICKETS: 11
]
teraz tę tablicę mieszamy (shuffle) i losujemy szczęśliwca, statystycznie najwięcej razy powinno ukazać
- USER_NAME: "Kukumba" (TICKETS: 55) i
- USER_NAME: "Kotołak" (TICKETS: 33)
[ on-line ]
drawn_ID = Math.floor(Math.random() * draw_pool.length);
const lucky_user = _PARTICIPANTS.find(p => p.ID === draw_pool[drawn_ID]);