如何将JavaScript数组分成块是一个很好的问题。目前我正在写一些统计方法,我使用的答案如下(尽管我选择不像答案中那样扩展Array原型):
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]]
。你有什么想法如何处理这个问题?
const movingSubgroups = ([...array], chunkSize = 2) => { chunkSize = Math.min(2 ** 32 - 1, Math.max(0, chunkSize)); return array.reduce((result, _element, index, currentArray) => { if(index <= currentArray.length - chunkSize){ result.push(currentArray.slice(index, index + chunkSize)); } return result; }, []); };
。 - Sebastian Simon