在 JavaScript 中将大字符串拆分为 n 大小的块
2022-08-30 00:14:29
我想将一个非常大的字符串(假设是10,000个字符)拆分为N大小的块。
就性能而言,最好的方法是什么?
例如:被 2 拆分将变为 ."1234567890"
["12", "34", "56", "78", "90"]
使用String.prototype.match
是否可以实现这样的事情,如果是这样,这是否是性能方面实现的最佳方法?
我想将一个非常大的字符串(假设是10,000个字符)拆分为N大小的块。
就性能而言,最好的方法是什么?
例如:被 2 拆分将变为 ."1234567890"
["12", "34", "56", "78", "90"]
使用String.prototype.match
是否可以实现这样的事情,如果是这样,这是否是性能方面实现的最佳方法?
你可以做这样的事情:
"1234567890".match(/.{1,2}/g);
// Results in:
["12", "34", "56", "78", "90"]
该方法仍将适用于大小不是块大小的精确倍数的字符串:
"123456789".match(/.{1,2}/g);
// Results in:
["12", "34", "56", "78", "9"]
通常,对于要从中提取最多 n 大小的子字符串的任何字符串,您都可以执行以下操作:
str.match(/.{1,n}/g); // Replace n with the size of the substring
如果您的字符串可以包含换行符或回车符,则可以执行以下操作:
str.match(/(.|[\r\n]){1,n}/g); // Replace n with the size of the substring
就性能而言,我用大约10k个字符尝试了一下,在Chrome上花了一秒钟多一点的时间。新浪网.
这也可以用于可重用函数:
function chunkString(str, length) {
return str.match(new RegExp('.{1,' + length + '}', 'g'));
}
我创建了几个更快的变体,你可以在jsPerf上看到。我最喜欢的是这个:
function chunkSubstr(str, size) {
const numChunks = Math.ceil(str.length / size)
const chunks = new Array(numChunks)
for (let i = 0, o = 0; i < numChunks; ++i, o += size) {
chunks[i] = str.substr(o, size)
}
return chunks
}