Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Получить элемент массива с вероятностью (https://javascript.ru/forum/dom-window/86177-poluchit-ehlement-massiva-s-veroyatnostyu.html)

rafaello 18.11.2024 12:47

Получить элемент массива с вероятностью
 
Здравствуйте!
Есть такой массив
var arr = ["apple;40", "pear;15", "orange;5", "pumpkin;30", "cabbage;10"];

И есть 20(условно, может быть больше или меньше) ящиков. Надо в каждый ящик положить по одному фрукту с заданным процентом вероятности, который в строке после разделителя ";".
Первое, что приходит на ум, это пройти циклом по все ящикам и на каждой итерации цикла получить случайное число от 1 до 100. И на основании полученного числа присвоить каждому ящику определенный фрукт. Название фрукта вытаскиваем методом str.split(";");
В общих чертах понятно, но как именно рассчитать процент вероятности на каждой итерации - вот здесь голову сломал. Пол дня просидел и ничего не получается.
Не подскажете!
Заранее огромное спасибо!

Rise 18.11.2024 14:24

Создать массив на 100 элементов и заполнить его согласно вероятностям: 40 элементов apple, 15 pear и тд.

rafaello 18.11.2024 14:33

Цитата:

Сообщение от Rise (Сообщение 556455)
Создать массив на 100 элементов и заполнить его согласно вероятностям: 40 элементов apple, 15 pear и тд.

Это очень неудобно.
Потому что изначально массив - это список юзер агентов, это я для наглядности написал, что фрукты. Этот список получен из текстового файла, где каждая строка - элемент массива, причем количество фруктов/юзер агентов может быть разное (при условии, что сумма процентов вероятности всех фруктов всегда равна 100).
Смысл в том, что сделал текстовый список и вставил в программу. Это гораздо проще, чем каждый раз делать массив из 100 элементов.

Rise 18.11.2024 21:10

let array1 = ["apple;40", "pear;15", "orange;5", "pumpkin;30", "cabbage;10"];
// Создать массив на 100 элементов
let array2 = new Array(100);
// и заполнить его согласно вероятностям
for (let index = 0, index1 = 0; index < array1.length; index++) {
    let [value1, value2] = array1[index].split(';');
    let index2 = index1 + Number(value2);
    array2.fill(index, index1, index2);
    index1 = index2;
}
console.log(String(array2));

rafaello 19.11.2024 07:59

хотя код не отрабатывает, есть какая то ошибка, но суть я понял.
Спасибо большое за помощь!

micscr 21.11.2024 10:46

Вот есть с примерами на пыхе. Особенно доставляет первый, где формула возведения в степень.
Встретишь где то и охереешь, пытаясь понять


Часовой пояс GMT +3, время: 07:35.