@jsonuser

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

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

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

Необходимо выбрать рандомно один из призов. Шанс зависит от кол-ва призов (count).
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function getRandom(arr, key) {
  const rand = Math.random() * arr.reduce((acc, n) => acc + n[key], 0);
  let sum = 0;
  return arr.find(n => (sum += n[key]) > rand);
}


const prize = getRandom(prizes, 'count');
Ответ написан
Пригласить эксперта
Ответы на вопрос 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);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы