Этот вопрос закрыт для ответов, так как повторяет вопрос Как сделать выборку по шансу?
@jsonuser

Как выбрать рандомные призы из массива?

Есть массив с объектами:

[{ "name": "Приз №1", "count": 10000 }, { "name": "Приз №2", "count": 400 }, { "name": "Приз №3", "count": 10 }]

Необходимо выбрать рандомно один из призов. Шанс зависит от кол-ва призов (count).
  • Вопрос задан
  • 158 просмотров
Ответы на вопрос 1
Seasle
@Seasle Куратор тега JavaScript
const pick = (items) => {
  const filteredItems = items.filter(item => item.count > 0);
  const total = filteredItems.reduce((acc, item) => acc + item.count, 0);
  if (total === 0) {
    return null;
  }
  
  const pickedChance = Math.random();
  let storedChance = 0;
  
  for (const item of filteredItems) {
    storedChance += item.count / total;
    
    if (pickedChance < storedChance) {
      item.count -= 1;
      return item.name;
    }
  }
}

pick(items);
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы