Задать вопрос
@ByJumping

Как сделать процентную вероятность выведения той или иной картинки из 2 массивов?

Есть 2 массива

const truePhotos = ['1 фото', '2 фото', '3 фото','4 фото',...'100 фото',]
const funnyPhotos = ['1 фото', '2 фото']

Делаю рандомное выведение картинки из первого массива

function getPhoto() {
    return truePhotos[Math.floor(Math.random() * truePhotos.length)]
}

Теперь хочу реализовать в этой функции 10% шанс выведения кляксы - смешного фото)) То есть когда человек обращается к функции getPhoto() он с 10% вероятностью получал фото из массива funnyPhotos.

И желательно хотел бы сделать на будущее если будет, например 4 массива, у одного шанс 10% у другого 40% и т.д.

Совершенно не могу подступиться к решению этой идеи
  • Вопрос задан
  • 67 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function weightedRandom(arr, key = () => 1) {
  const val = key instanceof Function ? key : n => n[key];
  const max = arr.reduce((acc, n) => acc + val(n), 0);

  return () => {
    let rand = Math.random() * max;
    return arr.find(n => (rand -= val(n)) < 0);
  };
}


const getRandomPhotosArray = weightedRandom([
  [ 9,  truePhotos ],
  [ 1, funnyPhotos ],
], 0);

function getPhoto() {
  const photos = getRandomPhotosArray()[1];
  return photos[Math.random() * photos.length | 0];
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы