function chunked(str, chunkCount) {
const chunkLen = Math.ceil(str.length / chunkCount);
return Array.from(
{ length: chunkCount },
(n, i) => str.slice(i * chunkLen, (i + 1) * chunkLen)
);
}
или
function chunked(str, chunkCount) {
return str.match(RegExp(`.{1,${Math.ceil(str.length / chunkCount)}}`, 'g'));
}
или
function chunked(str, chunkCount) {
return str.split(RegExp(`(.{${Math.ceil(str.length / chunkCount)}})`)).filter(Boolean);
}
UPD. В комментариях докладывают:
неаккуратненько как-то:
chunked('test', 3) // [ "te", "st", "" ]
Это поправимо. Наверное.const chunked = (str, chunkCount) =>
chunkCount <= str.length
? Array.from(
{ length: chunkCount },
function(n, i) {
return str.slice(i * this, i === chunkCount - 1 ? str.length : (i + 1) * this);
},
str.length / chunkCount | 0
)
: 'извини, столько непустых кусков нарезать нельзя';