在JavaScript中将大字符串分割成n大小块
在JavaScript中将大字符串分割成n大小块
我想将一个非常大的字符串(比如,10,000个字符)分成N个大小的块。
从性能的角度来看,最好的方法是什么?
例如:
\"1234567890\"
按2拆分后将变成[\"12\", \"34\", \"56\", \"78\", \"90\"]
。
如果使用String.prototype.match
,是否可能实现这样的拆分,如果是,那么这是否是性能最佳的方法?
admin 更改状态以发布 2023年5月24日
我创建了一些更快速的变体,你可以在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 }
你可以像下面这样做:
"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
就性能而言,我在Chrome上尝试了大约10k个字符,并且需要超过一秒钟的时间。 请自行斟酌。
这也可以用于可重复使用的函数中:
function chunkString(str, length) { return str.match(new RegExp('.{1,' + length + '}', 'g')); }