将数组切割为多个部分

时间:2017-02-21 15:51:57

标签: javascript arrays

我的例子:

let arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18];

let slice = (source, index) => source.slice(index, index + 4);

let length = arr.length;

let index = 0;

let result = [];

while (index < length) {
  let temp = slice(arr, index);
  
  result.push(temp);
  
  index += 4;
}

console.log(result);

日志记录:

  

[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18]]

我想将数组切成每4个项[1,2,3,4] [5,6,7,8]...

的多个部分

代码工作正常。

我有两个问题:

1 /。有没有其他方法可以通过使用内联代码来做到这一点?例如:result = arr.slice(...)

2 /。在我定义:

之后
let push = result.push;

为什么我还不能使用:

push(temp)

错误讯息:

  

未捕获TypeError:在null或undefined

上调用Array.prototype.push

更新:我已根据答案更新了解决方案。希望它有用。

let arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18];

let result = [];

arr.forEach((x,y,z) => !(y % 4) ? result.push(z.slice(y, y + 4)) : '');

console.log(result);

日志记录:

  

[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18]]

3 个答案:

答案 0 :(得分:1)

一种简单的方法

var chunckArray = function(array, chunkCount){
     var chunks = [];
     while(array.length){
         chunks.push(array.splice(0, chunkCount);
     }
     return chunks;
}

非消费方式:

var chunckArray = function(array, chunkCount){
     var chunks = [],  i, j;
     for (i = 0, j = array.length; i<j; i+= chunkCount) {
         chunks.push(array.slice(i, i + chunkCount); 
     }
     return chunks;
}

答案 1 :(得分:1)

我使用简单的reduce(请参阅plnkr

完成此操作
let arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18];

var counter = -1;
var result = arr.reduce((final, curr, i) => {
  if (i % 4 === 0) {
    final.push([curr])
    counter++;
  } else {
    final[counter].push(curr);
  }

  return final;
}, []);

console.log(result);

您可以调整4并将其替换为变量chuckSize,这样您就可以重新应用其他内容了 - 您也可以将其包含在带参数(array, chunkSize)的函数中如果你想

答案 2 :(得分:1)

你也可以使用for循环来实现它,它会给你相同的结果:

let arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18];

console.log(arr.length);
var result=[];

for(var i = 0; i < arr.length; i+=4) {
  result=arr.slice(i, i+4);
  console.log(result);
}