Javascript 用赔率和偶数按值分块数组

Javascript 用赔率和偶数按值分块数组,javascript,arrays,function,chunks,sub-array,Javascript,Arrays,Function,Chunks,Sub Array,我试图创建一个函数,该函数根据长度参数对数字数组进行分组。长度表示每个子数组的最大长度。代码的工作方式与获取子数组的目的相同,但我想做的是使其按奇数和偶数排序 function myFunctionA(myArr1, myVal) { newArr = []; for ( x = 0; x < myArr1.length; x += myVal) { newArr.push(myArr1.slice(x, x + myVal)); }

我试图创建一个函数,该函数根据长度参数对数字数组进行分组。长度表示每个子数组的最大长度。代码的工作方式与获取子数组的目的相同,但我想做的是使其按奇数和偶数排序

function myFunctionA(myArr1, myVal) {
      newArr = [];
      for ( x = 0; x < myArr1.length; x += myVal) {
        newArr.push(myArr1.slice(x, x + myVal));
      }
      return newArr;
    }
Console.log(myfunction([1,2,3,4,5,6,7,8,9,10],3))
由于arr 0和arr 1是我们在console.log语句中声明的正确长度,因此剩下7、8、9和10。但是,由于不能创建完整的子数组,而且它们的几率很小,甚至相等,因此它们形成了两个边为2的子数组

其他例子:

myfunction([1,2,3,4,5,6,7],2)
Should return [[1,3],[2,4],[5,7],[6]]

myfunction([1,2,3,4,5,6,7,8],1)
Should return [[1][2][3][4][5][6][7][8]]

一种可能是,首先将数字分成奇数和偶数,然后在其上循环,将数字推入一个新数组,在奇数和偶数之间切换

这不是最干净的代码,但它可以工作

函数myfunction(arr,n){
常量偶数=arr.reduce((acc,e)=>{
常量ind=+(e%2==0);
acc[ind]=acc[ind]| |[];
acc[ind].推力(e);
返回acc;
}, []);
设ind=0,res=[]];
while(偶数奇[0]。长度| |偶数奇[1]。长度){
for(设i=n;i--;){
常量val=偶数奇[ind].shift();
if(val)res[res.length-1]。推送(val)
}
ind=(ind+1)%2
res.push([])
}
pop()号决议
返回res;
}
for(常数n,共[1,2,3]){
控制台日志(n,
myfunction([1,2,3,4,5,6,7,8],n)
)

}
您可以使用一个数组来收集所有奇数和偶数值,如果组中没有项目,则可以推送该组。通过获得所需的大小,创建一个新数组

函数chunkenator(数组、大小、fn){
设组=[],
结果=[];
for(数组的let值){
常数组=fn(值);
如果(!groups[group])groups[group]=[];
如果(!groups[group].length)result.push(groups[group]);
组[组]。推送(值);
如果(组[group].length==大小)组[group]=[];
}
返回结果;
}
log(chunkenator([1,2,3,4,5,6,7,8,9,10],3,x=>x%2));

log(chunkenator([1,3,5,7,8,9,11,13,15],3,x=>x%2))如果您的输入项既不按升序排序,也不按降序排序,该怎么办?您是否需要对输出块进行排序,或者这些块可能会按照原始数组中的外观顺序排列?我建议改为编写三个函数:一个是将数组划分为偶数和赔率,另一个是将这些块划分为给定长度的子数组,一到
zip
/通过交替将它们展平为单个结果。您对
myfunction([1,3,5,7,8,9,11,13,15],2)
的结果有什么期望?我建议通过将
grouper
函数(此处:
x=>x%2
)作为回调传递,使其更通用
myfunction([1,2,3,4,5,6,7],2)
Should return [[1,3],[2,4],[5,7],[6]]

myfunction([1,2,3,4,5,6,7,8],1)
Should return [[1][2][3][4][5][6][7][8]]