SplitNParts
https://stackoverflow.com/a/45653060/2089675
by tanvir_alam_shawn
JavaScript
function splitNParts(num, parts) {
var total = 0;
parts.forEach(function(el){
total += el.value
});
if (total === 0) {
for (let i = 0; i <= num; i++) {
parts[i%parts.length].value++;
}
return parts
} else {
if (total < 100) {
var howMuchLess = 100 - total;
for (let i = 0; i <= howMuchLess - 1; i++) {
if (!parts[i%parts.length].pointer) {
parts[i%parts.length].value++;
parts[i%parts.length].pointer = true;
}
}
}
if (total > 100) {
var howMuchLess = total - 100;
for (let i = 0; i <= howMuchLess - 1; i++) {
if (!parts[i%parts.length].pointer) {
parts[i%parts.length].value++;
parts[i%parts.length].pointer = true;
}
}
}
console.log(total)
return parts
}
}
var parts = [
{name:"A", value:18, pointer:true},
{name:"B", value:17, pointer:false},
{name:"C", value:20, pointer:false},
{name:"D", value:16, pointer:false},
{name:"E", value:16, pointer:false},
{name:"F", value:16, pointer:false}
];
console.log(splitNParts(100, parts));