有关如何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;
}