@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% и т.д.

Совершенно не могу подступиться к решению этой идеи
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function weightedRandom(arr, weightKey, valueKey) {
  const weightsSum = arr.reduce((acc, n) => acc + n[weightKey], 0);
  return () => {
    let sum = 0;
    const rand = Math.random() * weightsSum;
    const item = arr.find(n => (sum += n[weightKey]) > rand);
    return valueKey == null ? item : item[valueKey];
  };
}


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

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

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

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