javascript 中的块数组,仅添加下一个块中的 1 个元素
Chunk array in javascript by adding only 1 element from next chunk
我希望将 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]
显然这段代码只是将数组分成相等的块,这不是我想要的。
你可以使用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);
使用原生 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);
我希望将 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]
显然这段代码只是将数组分成相等的块,这不是我想要的。
你可以使用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);
使用原生 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);