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

#javascript

#javascript

Вопрос:

Допустим, у меня есть 3 массива объектов:

 const fruits = [
{name: "Banana"}, 
{name: "Apple"}, 
{name: "Peach"}
]

const car = [
{name: "Audi"}, 
{name: "Bentley"}
]

const books = [
{name: "Alice in wonderland"}, 
{name: "Deep in the dark"}, 
{name: "Hunting Show"}
]
  

один временный массив, в котором я буду хранить случайные объекты из массивов

 const tempArray = []
  

Я хочу получить случайный объект из случайного массива

80% процентная вероятность того, что я получу случайный объект из массива фруктов или автомобилей

20% процентная вероятность того, что я получу случайный объект из массива книг

Пример: случайный шанс равен 80% -> случайный объект из массива fruits помещается в tempArray, а tempArray должен иметь объект с бананом «Banana»

Случайный шанс равен 20% -> Случайный объект из книг массива передается в tempArray, а tempArray должен иметь объект с именем «Охотничье шоу»

Как я могу это сделать в javascript?

Комментарии:

1. Очень вероятно, что некоторые из них будут работать

2. const chance = Math.random() даст вам число от 0 (включительно) до 1, из которого вы можете проверить, если chance > 0.2 затем нажать car или fruit во временный массив, либо нажать books на временный массив

Ответ №1:

Вам нужно будет получить два случайных числа — первое, чтобы решить, какую группу выбрать, а второе, чтобы выбрать из нее элемент. Чтобы дать одной группе более высокий шанс быть выбранной, первое случайное число должно быть из диапазона 1-100 (для учета процентов), а затем группа определяется по диапазону в пределах этого.

Например, чтобы дать группе фруктов 80% шанс быть выбранным:

 function getRandomNumber(min, max) {
    return Math.floor(Math.random() * (max - min   1))   min;
}

const fruits = [
{name: "Banana"}, 
{name: "Apple"}, 
{name: "Peach"}
]

const car = [
{name: "Audi"}, 
{name: "Bentley"}
]

const books = [
{name: "Alice in wonderland"}, 
{name: "Deep in the dark"}, 
{name: "Hunting Show"}
]

const tempArray = [];

let groupChoice = getRandomNumber(1, 100);
if (groupChoice > 20) {
  tempArray.push(fruits[getRandomNumber(0, fruits.length - 1)].name);
} else {
  tempArray.push(books[getRandomNumber(0, books.length - 1)].name);
}

console.log(tempArray);  

Комментарии:

1. нп — но имейте в виду, что это касается только двух групп — фруктов и книг. Если вы хотите включить также группу car, вам нужно будет обновить if() тесты, чтобы учесть другие диапазоны

Ответ №2:

Сначала мы объединяем массивы fruits и car. Затем мы генерируем случайное число от 1 до 100. Число от 1 до 80 выберет случайный элемент из массива fruitsAndCar, а число от 81 до 100 выберет случайный элемент из массива books.

 const fruits = [
    {name: "Banana"}, 
    {name: "Apple"}, 
    {name: "Peach"}
]

const car = [
    {name: "Audi"}, 
    {name: "Bentley"}
]

const books = [
    {name: "Alice in wonderland"}, 
    {name: "Deep in the dark"}, 
    {name: "Hunting Show"}
]

const tempArray = []
const fruitsAndCar = fruits.concat(car);

let randomNumber = Math.floor((Math.random() * 100)   1); // 1 to 100

if (randomNumber <= 80) {
    let randomIndex = Math.floor(Math.random() * fruitsAndCar.length); // 0 to 4
    tempArray.push(fruitsAndCar[randomIndex]);
} else {
    let randomIndex = Math.floor(Math.random() * books.length); // 0 to 2
    tempArray.push(books[randomIndex]);
}

console.log('tempArray: '   JSON.stringify(tempArray));