Я хотел бы разбить очень большую строку (скажем, 10 000 символов) на блоки размером N.
Как лучше всего это сделать с точки зрения производительности ?
Например:
«1234567890»
, разделенное на 2, станет [«12», «34», «56», «78», «90»]
.
Что-то вроде этого будет возможно, используя String.prototype.match
, и если да, будет ли это лучший способ сделать это с точки зрения производительности?
Вот решение, которое я предложил для шаблонных строк после небольшого экспериментирования:
Использование:
chunkString(5)`testing123`
function chunkString(nSize) {
return (strToChunk) => {
let result = [];
let chars = String(strToChunk).split('');
for(let i = 0; i < (String(strToChunk).length / nSize); i++) {
result = result.concat(chars.slice(i*nSize,(i+1)*nSize).join(''));
}
return result
}
}
document.write(chunkString(5)`testing123`);
// returns: testi,ng123
document.write(chunkString(3)`testing123`);
// returns: tes,tin,g12,3
Моя проблема с вышеупомянутым решением - то, что оно beark строка в формальный размер разделяет на блоки независимо от положения в предложениях.
я думаю следующий лучший подход; хотя требуется некоторую тонкую настройку производительности:
static chunkString(str, length, size,delimiter='\n' ) {
const result = [];
for (let i = 0; i < str.length; i++) {
const lastIndex = _.lastIndexOf(str, delimiter,size + i);
result.push(str.substr(i, lastIndex - i));
i = lastIndex;
}
return result;
}