Имеется массив значений. Получается если выпадает значение меньше 30 и после прибавления 30 вывод будет "Gold." Но что если должно быть "Bronze". Получается все отталкивается от того в какой последовательности расположены элементы в массиве. Но если подумать логически разве не шанс не должен быть 50 на 50 между Бронзой и Золотом , а сильвер падать чаще. Но в моём тесте (Из 10000) на оборот из-за того что золото на первом месте в массиве, оно падает чаще чем бронза.
В итоге меня проблема в том что я не знаю как правильно выбрать элемент по шансу. В моём примере выбор происходит по шансу
И по положению в массиве.
Есть простая функция с выборкой по весу.
var data = [ {name: 'Gold', weight: 30}, {name: 'Silver', weight: 40}, {name: 'Bronze', weight: 30} ];
function GetRandFromArray2(data) {
let total_sum = 0;
for (let i = 0; i < data.length; ++i) {
total_sum += data[i].weight;
}
const rand = Math.floor(Math.random() * total_sum);
total_sum = 0;
for (let i = 0; i < data.length; ++i) {
total_sum += data[i].weight;
if (total_sum >= rand) {
console.log(total_sum, rand)
return [ data[i].weight, data[i].name ];
}
}
}