有关如何split a JavaScript array into chunks的问题很大。我目前正在将其用于我正在编写的某些统计方法中,并且answer that I'm using如下所示(尽管我选择不像在答案中那样扩展Array原型(prototype)):

var chunk = function(array, chunkSize) {
    return [].concat.apply([],
        array.map(function(elem,i) {
            return i%chunkSize ? [] : [array.slice(i,i+chunkSize)];
        })
    );
};

这需要一个数组,例如[1,2,3,4,5,6],并且给定chunkSize 2会返回[[1,2],[3,4],[5,6]]。我很好奇如何修改它以创建“重叠”块的数组(或者对于那些熟悉诸如移动平均值,“移动子组”之类的方法的人)。

提供与上面相同的数组,并将chunkSize设置为3,它将返回[[1,2,3],[2,3,4],[3,4,5],[4,5,6]]chunkSize为2将返回[[1,2],[2,3],[3,4],[4,5],[5,6]]

关于如何解决这个问题有什么想法吗?

最佳答案

function chunk (array, chunkSize) {
       var retArr = [];
       for (var i = 0; i < array.length - (chunkSize - 1); i++){
            retArr.push(array.slice(i, i+chunkSize));
       }
       return retArr;
 }

如果您确实想扩展原型(prototype)(可能会更好),它将看起来像这样。
 Array.prototype.chunk = function( chunkSize ) {
       var retArr = [];
       for (var i = 0; i < this.length - (chunkSize - 1); i++){
            retArr.push( this.slice(i, i+chunkSize));
       }
       return retArr;
 }

07-24 09:51
查看更多