21

我想将字符串拆分为固定长度(例如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

我认为必须有更好的方法来做我想做的事。但我不想要额外的模块或库,如果可能的话,只想要简单的 JavaScript。

在询问之前,我已经看到了一些使用其他语言解决此问题的解决方案,但它们在设计时并未考虑到 JavaScript。

4

3 回答 3

40

你可以试试这个:

var a = 'aaaabbbbccccee';
var b = a.match(/(.{1,4})/g);
于 2012-05-06T23:12:56.007 回答
8

请参阅此相关问题:https ://stackoverflow.com/a/10456644/711085和https://stackoverflow.com/a/8495740/711085(如果性能有问题,请参阅评论中的性能测试。)

第一个(较慢的)链接:

[].concat.apply([],
    a.split('').map(function(x,i){ return i%4 ? [] : a.slice(i,i+4) })
)

作为字符串原型:

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"]
于 2012-05-06T23:17:51.307 回答
1
function stringToChanks(string, chunkSize) {
    const chunks = [];
    while (string.length > 0) {
        chunks.push(string.substring(0, chunkSize));
        string = string.substring(chunkSize, string.length);
    }
    return chunks
}
于 2021-04-28T09:29:32.223 回答