Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS阵列&x2014;将1D数组重新组织为N组的2D数组,按顺序放置值_Javascript_Arrays_Functional Programming - Fatal编程技术网

Javascript JS阵列&x2014;将1D数组重新组织为N组的2D数组,按顺序放置值

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], [

我已经尝试了一些方法,但我似乎不能想出一个可行的解决方案

简而言之,我想创建一个函数,将任意长度的1D数组转换为特定长度的新2D数组。1D数组中的每个值应按顺序放入每个子数组中,直到指定长度,然后从第一个子数组开始

输入/期望输出如下:


函数组数组(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))