在JavaScript中将大字符串分割成n大小块

33 浏览
0 Comments

在JavaScript中将大字符串分割成n大小块

我想将一个非常大的字符串(比如,10,000个字符)分成N个大小的块。

从性能的角度来看,最好的方法是什么?

例如:

\"1234567890\"按2拆分后将变成[\"12\", \"34\", \"56\", \"78\", \"90\"]

如果使用String.prototype.match,是否可能实现这样的拆分,如果是,那么这是否是性能最佳的方法?

admin 更改状态以发布 2023年5月24日
0
0 Comments

我创建了一些更快速的变体,你可以在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
}

0
0 Comments

你可以像下面这样做:

"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'));
}

0