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

Write a function that splits an array (first argument) into groups the length of size (second argument) and returns them as a multidimensional array

本文关键字:数组 参数 第二个 返回 拆分 一个 函数 第一个      更新时间:2023-09-26

我正在处理一个javascript问题,该问题要求我:

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

例如,输入

chunk([0, 1, 2, 3, 4, 5], 2)

应返回"分块数组":[[0,1],[2,3],[4,5]]

我可以在大多数例子中使用它,但当有两个以上的块时,它会切换顺序,我不知道为什么。这是我写的代码:

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);

另一个版本:

function chunk(arr, size) {
    var result = [];
    while (arr.length > size) {
        result.push(arr.splice(0, size))
    }
    if (arr.length)
        result.push(arr);
    return result;
}
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
}

我试着在控制台中使用这些代码行,它运行得非常好。

问题是,在每次迭代中,您都要将i提前size,并从位置i中删除size元素。这会导致您跳过每隔一个区块的处理。此外,您的延续条件应该是i < arr.length-size;实际上,在循环退出后推送temp之前,您需要测试它是否为空。尝试将循环重写为:

for (i = 0; i < arr.length-size;){
    newArray.push(arr.slice(i,i+size));
    temp.splice(i,size);
}

由于i始终为0,因此循环可以简化为:

while (arr.length > size) {
    newArray.push(arr.slice(0,size));
    temp.splice(0,size);
}
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 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 chunk(arr, size) {
  var newArr = [];
  // x is less than or equals arr.length.
  for(var x = 0; x <= arr.length; x++){
     newArr.push(arr.splice(0, size));
  }
  if (arr.length){
     newArr.push(arr);
  }
  return newArr;
}
chunk(['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;
}
function chunkArrayInGroups(arr, size) {
  var newarr=[];
  var num=0;
  var szie=0;
  var size2=size;
  if(arr.length%size==0){
    szie=arr.length/size;
  }
  else{
    var floor=arr.length/size;
    szie=Math.floor(floor)+1;
  }
  for (let i=0;i<szie;i++){
      newarr.push(arr.slice(num,size));
      num=num+size2;
      size=size+size2;
  }
  return newarr;
}
chunkArrayInGroups([0, 1, 2, 3, 4, 5], 2);