在javascript中将数组拆分为3组

在javascript中将数组拆分为3组,javascript,arrays,Javascript,Arrays,我试图将一组对象拆分为3组,但有一个小问题。我运行代码,它将第一个组分成2个,其余的分成3个。我希望最后一组包含剩余的元素。例如,如果有21个对象,那么最后一个组应该有2个,而第一个组应该有2个。如何使最后一个组成为包含剩余对象的组 var newData = []; var setOfThree = []; for (i = 0; i < data.length; i++) { setOfThree.push(data[i]); if (i % 3 == 1) { n

我试图将一组对象拆分为3组,但有一个小问题。我运行代码,它将第一个组分成2个,其余的分成3个。我希望最后一组包含剩余的元素。例如,如果有21个对象,那么最后一个组应该有2个,而第一个组应该有2个。如何使最后一个组成为包含剩余对象的组

var newData = [];
var setOfThree = [];

for (i = 0; i < data.length; i++) {
  setOfThree.push(data[i]);

  if (i % 3 == 1) {
    newData.push(setOfThree);
    setOfThree = [];
  }
}
var newData=[];
var集合三=[];
对于(i=0;i
因此,数据最终如下所示:


第一个数组获得2个项目,因为当
i==1
1%3
将导致
1

从计数器
1
开始可以是一种解决方案

data=[1,2,3,4,5,6,7]
var newData=[];
//var setOfThree=[];//不需要的
var j=0
newData.push([]);
//从一开始就推动,这样我们就不会错过数据
//不是三人一组

对于(i=1;i第一个数组获得2项,因为当
i==1
1%3
将导致
1

从计数器
1
开始可以是一种解决方案

data=[1,2,3,4,5,6,7]
var newData=[];
//var setOftree=[];//不需要
var j=0
newData.push([]);
//从一开始就推动,这样我们就不会错过数据
//不是三人一组

对于(i=1;i这里是一个递归实现,带有一些es6糖

var输入=[1,2,3,4,5,6,7,8]
函数groupByThree([a,b,c,…rest]){
if(rest.length==0)返回[[a,b,c].filter(x=>x!==undefined]
返回[a,b,c].concat(groupByThree(rest))
}

log(groupByThree(input))
这里是一个递归实现,带有一些es6代码

var输入=[1,2,3,4,5,6,7,8]
函数groupByThree([a,b,c,…rest]){
if(rest.length==0)返回[[a,b,c].filter(x=>x!==undefined]
返回[a,b,c].concat(groupByThree(rest))
}

console.log(groupByThree(input))
这里有一个非常干净高效的解决方案:

让groupByN=(n,数据)=>{
让结果=[];
对于(i=0;iconsole.log(JSON.stringify(groupByN(3[1,2,3,4,5,6,7,8]));
这里有一个非常干净高效的解决方案:

让groupByN=(n,数据)=>{
让结果=[];
对于(i=0;iconsole.log(JSON.stringify(groupByN(3[1,2,3,4,5,6,7,8]);
1%n==1
1%n==1
???