randomize-with-percentage
Version:
randomize-with-percentage is a typescript library for randomized get items with percentages.
32 lines • 1.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
function randomize(items) {
const allPercentageSum = items.reduce((acc, item) => acc + item.percent, 0);
if (allPercentageSum !== 100) {
throw new Error("All percentages sum must be 100");
}
const biggestDecimalLength = items.reduce((acc, item) => {
const decimal = item.percent.toString().split(".")[1];
if (!decimal)
return acc;
const decimalLength = Number(decimal.split("").length);
if (acc < decimalLength)
return decimalLength;
return acc;
}, 0);
const decimalGrowth = Math.pow(10, biggestDecimalLength);
const random = Math.floor(Math.random() * 100 * decimalGrowth);
let totalPercentPassed = 0;
const selectedListItem = items.find((item) => {
totalPercentPassed += item.percent * decimalGrowth;
if (random < totalPercentPassed)
return true;
return false;
});
return {
value: selectedListItem.value,
selectedListItem,
};
}
exports.default = randomize;
//# sourceMappingURL=index.js.map