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

311

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

从性能方面考虑,最好的方法是什么?

举个例子: "1234567890" 拆分为 2 小块会变成 ["12", "34", "56", "78", "90"]

是否可以使用 String.prototype.match 来实现这样的功能?如果可以,从性能方面考虑,这是否是最佳方式?

23个回答

0
使用slice()方法:
function returnChunksArray(str, chunkSize) {
  var arr = [];
  while(str !== '') {
    arr.push(str.slice(0, chunkSize));
    str = str.slice(chunkSize);
  }
  return arr;
}

可以使用substring()方法来完成相同的操作。
function returnChunksArray(str, chunkSize) {
  var arr = [];
  while(str !== '') {
    arr.push(str.substring(0, chunkSize));
    str = str.substring(chunkSize);
  }
  return arr;
}

这段代码由于使用了push()、slice()和substring(),会进行一些相对昂贵的数组内存读写操作。@Justin Warkentin的答案在保持同样可读性的同时更加高效。 - PathToLife

0

我对上述解决方案的问题在于它会将字符串分成固定大小的块,而不考虑其在句子中的位置。

我认为以下方法更好;尽管它需要一些性能调整:

 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;
    }

-3
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;
}

6
你的答案与其他答案相比没有提供任何新内容,并且缺乏像其他答案那样的描述。 - flob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接