通过在下一个块中仅添加1个元素来在JavaScript中分块

时间:2018-10-26 02:49:20

标签: javascript arrays chunks

我希望将JavaScript中的数组划分为3个块,但是我只想将块增加1个元素。下面的示例:

[1,2,3,4,5,6,7,8] => [1,2,3], [2,3,4], [3,4,5], [4,5,6], [5,6,7], [6,7,8]

所有结果数组的大小应为3。因此,只有一个元素向左滑动。

我有以下代码将数组分为3个块:

_.chunk($scope.substituteItems, 3);

此代码将数组划分为: [1,2,3,4,5,6,7,8] => [1,2,3],[3,4,5],[5,6,7],[8]

很显然,这段代码只是将数组分成相等的块,这不是我想要的。

2 个答案:

答案 0 :(得分:2)

您可以使用reduce()遍历数组。使用slice()将数组浅复制到块中。

let arr = [1, 2, 3, 4, 5, 6, 7, 8];
let numOfChunk = 3;

let result = arr.reduce((c, v, i, a) => {
  if (i + numOfChunk <= a.length) c.push(a.slice(i, i + numOfChunk));
  return c;
}, [])


console.log(result);


如果您更喜欢一行代码,也可以使用concat()代替push()

let arr = [1, 2, 3, 4, 5, 6, 7, 8];
let numOfChunk = 3;

let result = arr.reduce((c, v, i, a) => i + numOfChunk <= a.length ? c.concat([a.slice(i, i + numOfChunk)]) : c, [])

console.log(result);

答案 1 :(得分:2)

使用本机js ... 如果您将n元素数组按您的描述顺序地分块成大小为c的块,则将有n-c+1个块,在您的情况下8-3+1=6,将数组的前n-c+1个元素到包含自身的块+下一个2:

let c=3, arr=[1,2,3,4,5,6,7,8];
let result=arr.slice(0,arr.length-c+1).map((v,k)=>arr.slice(k,k+c));
console.log(result);