Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.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 使嵌套数组对数组元素进行分组_Javascript_Arrays - Fatal编程技术网

Javascript 使嵌套数组对数组元素进行分组

Javascript 使嵌套数组对数组元素进行分组,javascript,arrays,Javascript,Arrays,我有一个数组: arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]; 然后我想把4个元素组成一组。 每次迭代,这个数组都必须被修改,直到它得到最终的面 步骤1: arr = [[1,2,3,4],5,6,7,8,9,10,11,12,13,14]; 步骤2: arr = [[1,2,3,4],[5,6,7,8],9,10,11,12,13,14]; 步骤3: arr = [[1,2,3,4],[5,6,7,8],[9,10,11,12],13,14]; ar

我有一个数组:

arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14];
然后我想把4个元素组成一组。 每次迭代,这个数组都必须被修改,直到它得到最终的面

步骤1:

arr = [[1,2,3,4],5,6,7,8,9,10,11,12,13,14];
步骤2:

arr = [[1,2,3,4],[5,6,7,8],9,10,11,12,13,14];
步骤3:

arr = [[1,2,3,4],[5,6,7,8],[9,10,11,12],13,14];
arr = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14]];
步骤3:

arr = [[1,2,3,4],[5,6,7,8],[9,10,11,12],13,14];
arr = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14]];
这怎么可能

我试过这个:

var array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
var i,j,temparray,chunk = 4;
for (i=0,j=array.length; i<j; i+=chunk) {
    temparray = array.slice(i,i+chunk);
    console.log(temparray);
}
var数组=[1,2,3,4,5,6,7,8,9,10,11,12,13,14]
变量i,j,temparray,chunk=4;
对于(i=0,j=array.length;i,lodash方法将为您执行此操作

result = _.chunk(arr, 4);
lodash方法将为您实现这一点

result = _.chunk(arr, 4);

可以拼接阵列,直到长度小于上次插入的索引

var数组=[1,2,3,4,5,6,7,8,9,10,11,12,13,14],
i=0;
while(i}
您可以拼接阵列,直到长度小于上次插入的索引

var数组=[1,2,3,4,5,6,7,8,9,10,11,12,13,14],
i=0;
while(i
函数chunkArray(myArray,chunk\u size){
var指数=0;
var arrayllength=myArray.length;
var tempArray=[];
对于(索引=0;索引
函数chunkArray(myArray,chunk\u size){
var指数=0;
var arrayllength=myArray.length;
var tempArray=[];
对于(索引=0;索引
lodash可能比我的实现具有更好的性能,但是如果您希望使用vanilla javascript来实现这一点,那么您可以这样做(尽管还有许多其他方法):

var arr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14];
var newArr=arr.reduce((acc、val、idx)=>{
如果(idx%4==0){
acc.push([]);
}
附件[acc.length-1]。推送(val)
返回acc
}, [])

console.log(newArr);
lodash可能比我的实现具有更好的性能,但是如果您希望使用香草javascript来实现这一点,那么您可以这样做(尽管还有许多其他方法):

var arr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14];
var newArr=arr.reduce((acc、val、idx)=>{
如果(idx%4==0){
acc.push([]);
}
附件[acc.length-1]。推送(val)
返回acc
}, [])

console.log(newArr);
只需将其推送到生成的数组:

const chunk = 4, result = []
for (var i = 0, j = array.length; i < j; i += chunk) {
   result.push(array.slice(i,i  + chunk));
}
const chunk=4,result=[]
for(var i=0,j=array.length;i
只需将其推送到结果数组:

const chunk = 4, result = []
for (var i = 0, j = array.length; i < j; i += chunk) {
   result.push(array.slice(i,i  + chunk));
}
const chunk=4,result=[]
for(var i=0,j=array.length;i
使用方法

const arr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14],
newArr=arr.reduce((会计科目、项目、索引)=>{
如果((索引)%4==0){
附件推送([项目]);
}否则{
附件[附件长度-1]。推送(项目);
}
返回acc;
}, []);
console.log(newArr);//[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14]
使用方法

const arr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14],
newArr=arr.reduce((会计科目、项目、索引)=>{
如果((索引)%4==0){
附件推送([项目]);
}否则{
附件[附件长度-1]。推送(项目);
}
返回acc;
}, []);

console.log(newArr);//[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14]
我想如果我使用
递归调用添加一个解决方案也会很有趣,快乐编码

在这里测试一下

函数拆分(arr、offset、res){
//停止条件(偏移量超过阵列长度)
如果(偏移>阵列长度)
返回res;
//切成4片榆树
res.push(arr.slice(偏移量,偏移量+4));
//递归
返回分割(arr,偏移+4,res);
}
var res=分割([1,2,3,4,5,6,7,8,9,10,11,12,13,14],0,[]);

console.log(res);
我想如果我使用
递归调用添加一个解决方案也会很有趣,快乐编码

在这里测试一下

函数拆分(arr、offset、res){
//停止条件(偏移量超过阵列长度)
如果(偏移>阵列长度)
返回res;
//切成4片榆树
res.push(arr.slice(偏移量,偏移量+4));
//递归
返回分割(arr,偏移+4,res);
}
var res=分割([1,2,3,4,5,6,7,8,9,10,11,12,13,14],0,[]);

console.log(res);
您尝试过什么吗?请提供您已经尝试过的代码,我们很乐意帮助您使其工作。您的4步方法是什么?现在是一步(在接受的答案中)?如果是,请更改问题。@NinaScholz每4个元素必须拆分并保存在一个数组中,因此左元素少于4个,我们必须保存它以供以后使用。您尝试过什么吗?请提供您已经尝试过的代码,我们很乐意帮助您使其工作。您的4步方法是什么?现在是一步(在接受的答复中)?如果是这样,请更改问题。@NinaScholz每4个元素必须拆分并保存在一个数组中,因此左元素少于4个,我们必须保存它以供以后使用。VanillaJS胜过一切!我确信lodash会比我的代码快,但在对jsfiddle进行多次检查后,我的速度是lodash的3-5倍!!!:)只有具备写作技能和经验,VanillaJS才能击败一切