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

就性能而言,最好的方法是什么?

例如: "1234567890"除以2将变成["12","34","56","78","90"]。

使用string。prototype。match可以实现这样的事情吗如果可以,从性能来看,这是最好的方式吗?


当前回答

这是一个解决方案,我想出了一个模板字符串后,一个小实验:

用法:

chunkString(5)`testing123`

函数chunkString(nSize) return (strToChunk) => { Let result = []; let chars = String(strToChunk).split("); 对于(设I = 0;i < (String(strToChunk)。length / nSize);我+ +){ result = result.concat(char .slice(i*nSize,(i+1)*nSize).join(")); } 返回结果 } } document . write (chunkString(5)“testing123”); //返回:testi,ng123 document . write (chunkString(3)“testing123”); //返回:tes,tin,g12,3

其他回答

这是一个快速而直接的解决方案

function chunkString (str, len) { const size = Math.ceil(str.length/len) const r = Array(size) let offset = 0 for (let i = 0; i < size; i++) { r[i] = str.substr(offset, len) offset += len } return r } console.log(chunkString("helloworld", 3)) // => [ "hel", "low", "orl", "d" ] // 10,000 char string const bigString = "helloworld".repeat(1000) console.time("perf") const result = chunkString(bigString, 3) console.timeEnd("perf") console.log(result) // => perf: 0.385 ms // => [ "hel", "low", "orl", "dhe", "llo", "wor", ... ]

惊喜!你可以使用split来分割。

var parts = "1234567890 ".split(/(.{2})/).filter(O=>O)

结果显示['12','34','56','78','90',' ']

var str = "123456789";
var chunks = [];
var chunkSize = 2;

while (str) {
    if (str.length < chunkSize) {
        chunks.push(str);
        break;
    }
    else {
        chunks.push(str.substr(0, chunkSize));
        str = str.substr(chunkSize);
    }
}

alert(chunks); // chunks == 12,34,56,78,9
var l = str.length, lc = 0, chunks = [], c = 0, chunkSize = 2;
for (; lc < l; c++) {
  chunks[c] = str.slice(lc, lc += chunkSize);
}

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