@68publishers/amp-client
Version:
JS Client for 68publishers/amp
28 lines (20 loc) • 638 B
JavaScript
export class Randomizer {
static randomByWeights(items, weightProperty = 'weight') {
const distributions = {};
let weightTotal = 0;
for (let i = 0; i < items.length; i++) {
weightTotal += items[i][weightProperty];
}
for (let i = 0; i < items.length; i++) {
distributions[i] = items[i][weightProperty] / weightTotal;
}
let key = 0,
selector = Math.random();
while (selector > 0) {
selector -= distributions[key];
key++;
}
key--;
return items[key] ? items[key] : items[0];
}
}