特定于JavaScript的数组分块方法

特定于JavaScript的数组分块方法,javascript,arrays,json,chunks,Javascript,Arrays,Json,Chunks,我有这样的数组: [{i: 0, abc: true}, {i: 1, abc: true}, {i: 2, abc: true}, {i: 3, abc: true}, {i: 4, abc: true}, {i: 5, abc: true}, {i: 6, abc: true}, {i: 7, abc: true}, {i: 8, abc: true}, {i: 9, abc: true}, {i: 10, abc: true}, {i: 11, abc: true}, ] [[{i: 0

我有这样的数组:

[{i: 0, abc: true}, {i: 1, abc: true}, {i: 2, abc: true}, {i: 3, abc: true}, {i: 4, abc: true}, {i: 5, abc: true}, {i: 6, abc: true}, {i: 7, abc: true}, {i: 8, abc: true}, {i: 9, abc: true}, {i: 10, abc: true}, {i: 11, abc: true}, ]
[[{i: 0, abc: true}, {i: 1, abc: true}, {i: 2, abc: true}], [{i: 3, abc: true}, {i: 4, abc: true}, {i: 5, abc: true}], [{i: 5, abc: true}, {i: 6, abc: true}, {i: 7, abc: true}], [{i: 7, abc: true}, {i: 8, abc: true}, {i: 9, abc: true}], [{i: 9, abc: true}, {i: 10, abc: true}, {i: 11, abc: true}] ]
我也需要将其分块,并在输出上有如下内容:

[{i: 0, abc: true}, {i: 1, abc: true}, {i: 2, abc: true}, {i: 3, abc: true}, {i: 4, abc: true}, {i: 5, abc: true}, {i: 6, abc: true}, {i: 7, abc: true}, {i: 8, abc: true}, {i: 9, abc: true}, {i: 10, abc: true}, {i: 11, abc: true}, ]
[[{i: 0, abc: true}, {i: 1, abc: true}, {i: 2, abc: true}], [{i: 3, abc: true}, {i: 4, abc: true}, {i: 5, abc: true}], [{i: 5, abc: true}, {i: 6, abc: true}, {i: 7, abc: true}], [{i: 7, abc: true}, {i: 8, abc: true}, {i: 9, abc: true}], [{i: 9, abc: true}, {i: 10, abc: true}, {i: 11, abc: true}] ]
子数组中的最后一个对象与下一个子数组中的第一个对象相同

现在我写了这样的东西:

const chunk = (arr, size) => Array.from( { length: Math.ceil(arr.length / size) }, (v, i) =>
arr.slice(i * size, i * size + size));

但它只是通过特定数量的元素进行分块。我也可以通过奇怪的嵌套循环来实现我的目标。。但也许有人知道得更清楚。。更简单的方法

如果当前块索引(
i
)不是0,则可以从切片开始和结束中删除1。但是,由于我们将索引向后移动1,因此可能会有更多的块。我们需要将总块的数量与递减索引进行比较,并相应地增加页数

const chunkMinus1=(arr,size)=>{
const chunks=Math.ceil(arr.length/size)
常量maxItems=块*(大小-1)+1
const length=chunks+Math.ceil(Math.max(arr.length-maxItems,0)/size)
返回数组.from(
{length},
(v,i)=>arr.slice(i*size-(i?1:0),i*size+size-(i?1:0))
)
};
常量=[{i:0,abc:true},{i:1,abc:true},{i:2,abc:true},{i:3,abc:true},{i:4,abc:true},{i:5,abc:true},{i:6,abc:true},{i:7,abc:true},{i:8,abc:true},{i:9,abc:true},{i:10,abc:true},{i:11,abc:true}]
常数结果=1(arr,6)

console.log(result)
下面是一个非常简单的方法

通过使用模,每n个元素引入一个新数组(对于您的情况,每三个元素引入一个新数组),找到该n个元素并将元素添加到最后一个子数组中

防小提琴:


这一个更容易-在花时间发布你的问题之前搜索答案。大多数常见的场景,例如您所要求的场景,已经用许多编程语言解决了。请结束你的问题,除非你想要与我上面提到的不同的东西。呃。。。真正地如果我能找到我问题的答案,我就不会问了。相信我:这很公平。我发现我分享的链接中的方法更加清晰。我会推荐的。谢谢。你的答案不完全是我想要的,但我改进了它,现在我得到了我所需要的。。const chunk=(arr,size)=>Array.from({length:Math.ceil(arr.length/size)},(v,i)=>arr.slice(i*size,i*size+size+1))@tomcio61-我已经更新了答案,以说明缺少的项目,因为索引减少,块的数量不能覆盖所有项目。