Javascript 编写一个函数,将数组(第一个参数)拆分为大小相同的组(第二个参数),并将其作为多维数组返回

Javascript 编写一个函数,将数组(第一个参数)拆分为大小相同的组(第二个参数),并将其作为多维数组返回,javascript,Javascript,我正在解决一个javascript问题,该问题要求我: 编写一个函数,将数组(第一个参数)拆分为大小相同的组(第二个参数),并将其作为多维数组返回 例如,输入 chunk([0, 1, 2, 3, 4, 5], 2) 应返回“分块数组”: [0,1],[2,3],[4,5]] 我可以让它在大多数例子中工作,但当有2个以上的块时,它会切换顺序,我不知道为什么。以下是我编写的代码: function chunk(arr, size) { var newArray = [], i,

我正在解决一个javascript问题,该问题要求我:

编写一个函数,将数组(第一个参数)拆分为大小相同的组(第二个参数),并将其作为多维数组返回

例如,输入

chunk([0, 1, 2, 3, 4, 5], 2)
应返回“分块数组”: [0,1],[2,3],[4,5]]

我可以让它在大多数例子中工作,但当有2个以上的块时,它会切换顺序,我不知道为什么。以下是我编写的代码:

function chunk(arr, size) {
  var newArray = [],
      i, temp = arr;
  for (i = 0;i<= arr.length-size;i+=size){
    newArray.push(arr.slice(i,i+size));
    temp.splice(i,size);
  }
  newArray.push(temp);
  return newArray;
}
chunk(['a', 'b', 'c', 'd'], 2);
功能块(arr,大小){
var newArray=[],
i、 温度=arr;

对于(i=0;i问题在于,每次迭代时,您都在按
size
推进
i
,并从位置
i
中删除
size
元素。这会导致您跳过处理其他块。此外,您的继续条件应该是
i
;实际上,您需要测试清空
temp
,然后在循环退出后按下它。尝试将循环重写为:

for (i = 0; i < arr.length-size;){
    newArray.push(arr.slice(i,i+size));
    temp.splice(i,size);
}
另一个版本:

function chunk(arr, size) {
    var result = [];
    while (arr.length > size) {
        result.push(arr.splice(0, size))
    }
    if (arr.length)
        result.push(arr);

    return result;
}
功能块(arr,大小){
var newArr=[];
//x小于或等于arr.length。
对于(var x=0;x
功能块(arr,大小){
var arr1=[];
变量j=0,温度=尺寸;
var len=阵列长度/尺寸;
对于(var i=0;i
我尝试在console中使用这些代码行,效果非常好。

这是我的解决方案:

function chunkArrayInGroups(arr, size) {
  var acum=[];
  for(i=0;i<arr.length;i=i+size)
  {
    var vec=arr.slice(i,size+i);
    acum.push(vec);
  }

  return acum;
}
函数chunkArrayInGroups(arr,size){
var acum=[];
对于(i=0;i如此多的方式

function chunkArrayInGroups(arr, size) {
 var value = [];

for(var i =0; i<arr.length; i += size){
 value.push(arr.slice(i, size+i));
}

return value;
}

chunkArrayInGroups(["a", "b", "c", "d"], 2);
函数chunkArrayInGroups(arr,size){
var值=[];
对于(var i=0;i
函数chunkArrayInGroups(arr,size){
var结果=[],
迭代次数=Math.ceil(arr.length/size);
对于(var i=0;i
函数chunkArrayInGroups(arr,size){
var-temp=[];
var结果=[];
对于(变量a=0;a
如果“i”不迭代,这个循环不会永远运行吗?@Gwen-不会,因为每次循环,
arr.length
都会下降
size
。最终,
arr.length-size
将小于
i
(始终为0)。(现在我想,既然<代码> i <代码>停留在0,它可以从循环中被消除。我将重写循环来显示。)请考虑添加代码的解释。只有代码是不够的。还解释为什么答案比接受的答案好(如果是这样的话)我也在研究这个问题,现在我看到了这个代码,它工作了,但我还是不明白,有人能给我解释一下吗?我们的大小为2,arr.splice(0,2)只给我们['a','b',],下一步是什么?你是什么意思-下一步是什么?@u mulder,我们得到这个结果:['a','b',['c','d']],但是while循环的末尾没有++,不允许重复执行代码。我在这里感到困惑。我甚至不知道如何表达我自己。没有必要添加
++
,只要你
拼接
数组,数组就会减少。@u mulder,哦,好吧!现在我明白了,谢谢你先生!这个问题的另一个简单答案。Thoug它不是执行速度最快的。只需将总数组长度除以所需的大小即可得到总迭代次数&因此这个问题也可以在不使用splice的情况下解决!!请将您的评论移到答案中
function chunk(arr, size) {

  var arr1=[];
  var j=0,temp=size;
  var len = arr.length/size;
  for (var i=0; i<len; i++){
    arr1.push(arr.slice(j,size));
    j+=temp;
    size+=temp;
  }
  return arr1;
}

chunk([0, 1, 2, 3, 4, 5], 2);
function chunk(arr, size) {
  var newArr = []; // New empty array
  while (arr.length > 0) { // Loop thru the array items
    newArr.push(arr.splice(0, size)); // Removes first 2 items then add it to new array
  }
  return newArr; // New 2D array
}
function chunkArrayInGroups(arr, size) {
  var acum=[];
  for(i=0;i<arr.length;i=i+size)
  {
    var vec=arr.slice(i,size+i);
    acum.push(vec);
  }

  return acum;
}
function chunkArrayInGroups(arr, size) {
 var value = [];

for(var i =0; i<arr.length; i += size){
 value.push(arr.slice(i, size+i));
}

return value;
}

chunkArrayInGroups(["a", "b", "c", "d"], 2);
function chunkArrayInGroups(arr, size) {
  var result = [],
      iterations = Math.ceil(arr.length/size);
  for (var i =0; i<iterations;i++){
      var sub = arr.splice(0, size);
      result.push(sub);
  }
  return result;       
}
    function chunkArrayInGroups(arr, size) {

  var temp = [];
  var result = [];

  for (var a = 0; a < arr.length; a++) {
    if (a % size !== size - 1)
      temp.push(arr[a]);
    else {
      temp.push(arr[a]);
      result.push(temp);
      temp = [];
    }
  }

  if (temp.length !== 0)
    result.push(temp);
  return result;
}