将JavaScript字符串拆分为固定长度的片段

将JavaScript字符串拆分为固定长度的片段,javascript,html,node.js,Javascript,Html,Node.js,我想把一根绳子分成固定长度(例如N个)的几段。当然,若原始字符串的长度不是N的倍数,最后一段可以更短 我需要最快的方法来做这件事,但也最简单的写。到目前为止,我的做法如下: var a = 'aaaabbbbccccee'; var b = []; for(var i = 4; i < a.length; i += 4){ // length 4, for example b.push(a.slice(i-4, i)); } b.push(a.slice(a.length - (4

我想把一根绳子分成固定长度(例如N个)的几段。当然,若原始字符串的长度不是N的倍数,最后一段可以更短

我需要最快的方法来做这件事,但也最简单的写。到目前为止,我的做法如下:

var a = 'aaaabbbbccccee';
var b = [];
for(var i = 4; i < a.length; i += 4){ // length 4, for example
    b.push(a.slice(i-4, i));
}
b.push(a.slice(a.length - (4 - a.length % 4))); // last fragment
var a='aaaabbccccee';
var b=[];
例如,对于(vari=4;i
我想一定有更好的方法来做我想做的事。但我不想要额外的模块或库,只要简单的JavaScript(如果可能的话)

在提问之前,我已经看到了一些使用其他语言解决此问题的解决方案,但这些解决方案并不是针对JavaScript设计的。

您可以尝试以下方法:

var a = 'aaaabbbbccccee';
var b = a.match(/(.{1,4})/g);

请参阅此相关问题:和(如果性能是一个问题,请参阅注释中的性能测试。)

第一(较慢)链接:

作为字符串原型:

String.prototype.chunk = function(size) {
    return [].concat.apply([],
        this.split('').map(function(x,i){ return i%size ? [] : this.slice(i,i+size) }, this)
    )
}
演示:


你真的每次都写出来只是为了避免函数调用吗?是什么让你认为你可以有最快的代码执行和简单的实现?这两种品质经常相互竞争。下面是另一个实现,但仍然与您的非常相似:@Esailija他在什么地方说过@斯格蒙达,我想没有更好的办法了。由于javascript
string
没有实现这一点的方法,像您这样的代码行很少。这应该足够快。尝试使用
String.substring
String.substr
而不是
String.slice
并比较性能。非常简单!我喜欢!但如果固定长度是32,会发生什么呢?我必须写
/(.{32}{31}{30}.{2}}./g
。太多的文字!甚至更短:
a.match(/(.{1,4})/g)
我可能会在
上使用
[\S\S]
或类似的,因为它包含了所有完美的字符,@Niko!这正是我想要的。对不起,伙计们,我以前试着编辑过这篇文章,写了@Niko的想法,但我不知道为什么,我不知道正则表达式的答案不需要写
/({32}.{31}.{30}.......{2}.{code>,我不得不推荐这个答案,因为它非常简洁。=)此解决方案仅适用于组块数组。这似乎非常适合于相同的问题,但适用于数组。非常感谢。对于拆分字符串,我更喜欢上面的解决方案。@FelixKling:啊,很有趣。虽然不应该通过测试来暗示(可能是错误的)Array.concat速度很慢。最可能的罪魁祸首是1)转换为数组(可通过在准备代码中执行
.split(“”)
进行测试),以及2)执行不必要的4x if语句。尽管如此,for-loop版本肯定会更高效;我还没有决定应该把这两个答案中的哪一个联系起来。谢谢,我将编辑以指出这一点。
String.prototype.chunk = function(size) {
    return [].concat.apply([],
        this.split('').map(function(x,i){ return i%size ? [] : this.slice(i,i+size) }, this)
    )
}
> '123412341234123412'.chunk(4)
["1234", "1234", "1234", "1234", "12"]
function stringToChanks(string, chunkSize) {
    const chunks = [];
    while (string.length > 0) {
        chunks.push(string.substring(0, chunkSize));
        string = string.substring(chunkSize, string.length);
    }
    return chunks
}