JSFiddle - React, Tailwind, and code Playground
by Jon-Carlos Rivera
JavaScript
function rand (max) { return Math.random() * max; }
function randomSample (array) {
var answer = array[0];
var totalWeight = array[0].w;
var left = array.slice(1);
left.forEach(function (element) {
var w = element.w;
var r = rand(totalWeight + w);
if (r > totalWeight) {
answer = element;
}
totalWeight += w;
});
return answer;
}
var testElements = [{n: 'fe', w: 5.33},{n: 'fi', w: 1.33},{n: 'fo', w: 10}, {n: 'fum', w: 3.33}];
var runs = 100000;
var num = runs;
var results = {fe:0, fi:0, fo:0, fum:0};
while (num--) {
var answer = randomSample(testElements);
results[answer.n]++;
}
Object.keys(results).forEach(function (key) {
results[key] = results[key] / runs * 100;
});
console.log(results);