JSFiddle - React, Tailwind, and code Playground
JavaScript
let milestones = [10, 30, 20];
let milestonesSum = milestones.reduce((a, b) => a + b, 0);
function getPercentFromValue(val) {
return val / milestonesSum * 100.0;
}
function getValueFromPercent(per) {
return per / 100.0 * milestonesSum;
}
function getMilestoneIndexFromPercent(per) {
let v = getValueFromPercent(per);
let i = 0;
while (i < milestones.length && v > milestones[i]) {
v -= milestones[i];
i++;
}
return i;
}
console.log("percent to value :");
for (let i = 0; i <= 100; i++) {
console.log(i, getValueFromPercent(i), getMilestoneIndexFromPercent(i));
}
console.log("value to percent :");
for (let i = 0; i <= milestonesSum; i++) {
console.log(i, getPercentFromValue(i), getMilestoneIndexFromPercent(getPercentFromValue(i)));
}