我希望将一个非常大的字符串(比如说 10,000 个字符)分割成 N 大小的块。
从性能方面考虑,最好的方法是什么?
举个例子:
"1234567890"
拆分为 2 小块会变成 ["12", "34", "56", "78", "90"]
。
是否可以使用 String.prototype.match
来实现这样的功能?如果可以,从性能方面考虑,这是否是最佳方式?
我希望将一个非常大的字符串(比如说 10,000 个字符)分割成 N 大小的块。
从性能方面考虑,最好的方法是什么?
举个例子:
"1234567890"
拆分为 2 小块会变成 ["12", "34", "56", "78", "90"]
。
是否可以使用 String.prototype.match
来实现这样的功能?如果可以,从性能方面考虑,这是否是最佳方式?
function returnChunksArray(str, chunkSize) {
var arr = [];
while(str !== '') {
arr.push(str.slice(0, chunkSize));
str = str.slice(chunkSize);
}
return arr;
}
function returnChunksArray(str, chunkSize) {
var arr = [];
while(str !== '') {
arr.push(str.substring(0, chunkSize));
str = str.substring(chunkSize);
}
return arr;
}
我对上述解决方案的问题在于它会将字符串分成固定大小的块,而不考虑其在句子中的位置。
我认为以下方法更好;尽管它需要一些性能调整:
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;
}
function chunkString(str, length = 10) {
let result = [],
offset = 0;
if (str.length <= length) return result.push(str) && result;
while (offset < str.length) {
result.push(str.substr(offset, length));
offset += length;
}
return result;
}