svcorelib
Version:
Core library used in the projects of Sv443 and the Sv443 Network. Contains tons of miscellaneous QoL features.
47 lines (40 loc) • 1.22 kB
JavaScript
function splitIntoParts(array, partsAmt, balanced = false)
{
if(!Array.isArray(array))
throw new TypeError("Invalid argument 'array' provided in splitIntoParts()");
if(typeof partsAmt !== "number" || isNaN(partsAmt))
throw new TypeError("Invalid argument 'partsAmt' provided in splitIntoParts()");
// credits to https://stackoverflow.com/a/8189268/8602926 lol
if(partsAmt < 2)
return [array];
const len = array.length,
out = [];
let size,
i = 0;
if(len % partsAmt === 0)
{
size = Math.floor(len / partsAmt);
while(i < len)
out.push(array.slice(i, i += size));
}
else if(balanced === true)
{
while(i < len)
{
size = Math.ceil((len - i) / partsAmt--);
out.push(array.slice(i, i += size));
}
}
else
{
partsAmt--;
size = Math.floor(len / partsAmt);
if(len % size === 0)
size--;
while(i < size * partsAmt)
out.push(array.slice(i, i += size));
out.push(array.slice(size * partsAmt));
}
return out;
}
module.exports = splitIntoParts;