Javascript JS阵列&x2014;将1D数组重新组织为N组的2D数组,按顺序放置值
我已经尝试了一些方法,但我似乎不能想出一个可行的解决方案 简而言之,我想创建一个函数,将任意长度的1D数组转换为特定长度的新2D数组。1D数组中的每个值应按顺序放入每个子数组中,直到指定长度,然后从第一个子数组开始 输入/期望输出如下:Javascript JS阵列&x2014;将1D数组重新组织为N组的2D数组,按顺序放置值,javascript,arrays,functional-programming,Javascript,Arrays,Functional Programming,我已经尝试了一些方法,但我似乎不能想出一个可行的解决方案 简而言之,我想创建一个函数,将任意长度的1D数组转换为特定长度的新2D数组。1D数组中的每个值应按顺序放入每个子数组中,直到指定长度,然后从第一个子数组开始 输入/期望输出如下: 函数组数组(arr、numberOfGroups){ ... }; //输入数据 常量项=[1,2,3,4,5,6,7]; 常数大小=3; log(groupArray(items,size)); //预期产量 // [[1, 4, 7], [2, 5], [
函数组数组(arr、numberOfGroups){
...
};
//输入数据
常量项=[1,2,3,4,5,6,7];
常数大小=3;
log(groupArray(items,size));
//预期产量
// [[1, 4, 7], [2, 5], [3, 6]]
为
函数组数组(arr,numberOfGroups){
var结果=[]
对于(变量i=0;i您可以使用索引和所需的数组大小来获取正确的目标数组
const
groupArray=(数组,大小)=>array.reduce((结果,值,索引)=>{
常量目标=索引%size;
如果(!result[target])result[target]=[];
结果[目标]。推送(值);
返回结果;
}, []);
log(groupArray([1,2,3,4,5,6,7,3])代码>
。作为控制台包装{max height:100%!important;top:0;}
这样的东西也可以,
你不需要改变任何输入
constchunkify=(步骤,列表)=>list.reduce(
([chunk,rest],item,i)=>{
常量选取=i%步长===0;
返回[
chunk.concat(拾取项目:[]),
剩余混凝土(挑选?[]:项目),
];
},
[[], []],
);
常量组=(步骤、列表、结果=[])=>{
如果(!list.length){返回结果;}
const[chunk,rest]=chunkify(步骤,列表);
返回组(步骤-1,rest,[…结果,块]);
};
常量数据=[1,2,3,4,5,6,7];
常数步长=3;
console.log(
组(步骤、数据),
);代码>有方法next
,每次调用都将返回下一个索引,当限制达到numberOfGroups
时,重置索引0。(在这种情况下,它将类似于0、1、2、0、1、2……)
使用此方法,可以轻松推送到相应的输出子数组
constgrouparray=(arr,numberOfGroups)=>{
const output=Array.from({length:numberOfGroups},()=>[]);
const next=index=>index%numberOfGroups;
arr.forEach((num,i)=>output[next(i)].push(num));
返回输出;
};
//输入数据
常量项=[1,2,3,4,5,6,7];
常数大小=3;
log(groupArray(items,size))代码>