javascript - 如何使用 JavaScript 对字符串进行分块

标签 javascript

我有一个超过 32kb 的字符串,需要对其进行分块,每个 block 的大小限制为 32kb。这可能吗?使用JavaScript,我只能找到诸如切割字符串或分割字符串之类的代码,我认为这些代码与我的任务无关

stringChop = function(str, size){
if (str == null)
return [];
str = String(str);
return size > 0 ? str.match(new RegExp('.{1,' + size + '}', 'g')) : [str];
}

我还有检查字节的代码

const byteSize = str => new Blob([str]).size;

const result = byteSize("sample")

最佳答案

你真的不想“花时间”在 Node 中分割大字符串。

如果你必须使用原版

这对于 JavaScript 来说是完全可能的(而且你已经非常接近了)。尽管在没有正则表达式和生成器的情况下这会更优雅:

function* chunk(str, size = 3) {
  for(let i = 0; i < str.length; i+= size ) yield str.slice(i, i + size);
}
[...chunk('hello world')]; // ["hel", "lo ", "wor", "ld"];

如果你会使用 Node.js

我会使用createReadStream读取您想要拆分的文件,然后在达到限制时将其写入不同的文件。这更有效,因为您不需要创建许多小字符串或将所有数据保留在内存中:

(async () => {
  let currentFileIndex = 0, currentBytes = 0;
  let currentFile = fs.createWriteStream(`${currentFileIndex}.csv`);
  for await(const chunk of fs.createReadStream('input.csv') {
    currentBytes += chunk.length;
    if (currentBytes > 32000) { // or whatever limit you want
      currentFile.end(); // probably wait for the allback here
      currentBytes = 0;
      currentFile = fs.createWriteStream(`${++currentFileIndex}.csv`)
    }
    await util.promisify(cb => currentFile.write(chunk, cb)();
  }
})();

关于javascript - 如何使用 JavaScript 对字符串进行分块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65180741/

相关文章:

javascript - SharePoint - 显示模板 - 访问客户端上下文对象

javascript - 将函数分配给对象属性

javascript - 将 float div 居中

javascript - 关于 Underscore 源代码开头部分的混淆

javascript - 如何使 while 循环真正异步

查询生成器的 Javascript 正则表达式

javascript - Ember Data hasMany 关系空结果

JavaScript - IF 语句结束后继续

javascript - 每次我在输入框中按键盘输入按钮(其中有文本)时都会出现新段落

JavaScript 使用正则表达式验证电话号码