免费代码营 - >篝火:矮胖的猴子

free code camp -> Bonfire: Chunky Monkey

本文关键字:猴子 篝火 免费代码      更新时间:2023-09-26

这个篝火来自自由代码阵营。

此篝火中的任务如下:

编写一个函数,将数组(第一个参数(拆分为大小长度的组(第二个参数(,并将它们作为多维数组返回。

我的代码如下:

var ars = [];
var all = [];
var ll = 0;
function chunk(arr, size) {
 for (var n = 0; n < arr.length/size; n++ ) {
  for(var l = 0; l < arr.length/(arr.length/size);l++) {
   if(ll < arr.length){
    ars[l]= arr[ll];
   }
   ll += 1;
  }
  all[n] = ars;
  ars = [];
 }
 return all;
}
chunk([0, 1, 2, 3, 4, 5], 4);

这个块返回的特定示例

[0,1,2,3],[4,5]]

这与检查系统认为是正确的相同:

[ [ 0, 1, 2, 3 ], [ 4, 5 ] ]

(我希望并认为空间无关紧要。如果不是这种情况,请告诉我(

但它在我写的东西中没有看到这一点。它只是看到

[ [], [] ]

有人可以告诉我出了什么问题吗?

function chunk(arr, size) {
 var arr2 =[],
 i=0;
 while( i< arr.length){
  arr2.push(arr.slice(i,i+=size));
 }
 return arr2;
}
空格

无关紧要。不过我并不完全理解你的问题。你为什么得到错误的数据?

我认为您的代码中存在一个巨大的问题是您的函数正在全局范围内操作变量。将这些用于arsall的变量声明放在函数作用域中。

这也适用于:

function chunk(r, size) {
    var n = [];
    while(r.length) {
        n.push(r.splice(0, size));
    }
    return n;
}
var r = 'abcdefghijklmnopqrstuvwxyz'.split('');
document.getElementById("result").innerHTML = "<pre>" + chunk(r, 4).join("'n") + "</pre>";
<div id="result">
</div>

这是我

写的答案。它正在工作。

function chunk(arr, size) {
 var up=[];
 var a=0;
 var b=0;
 while(a<arr.length){ 
   up[b]=[];
   for(var i=0;i<size&&a<arr.length;i++){
     up[b].push(arr[a]);
     console.log(arr[a]);
     a++;
   }
  b++;
 }
  return up;
}
chunk(["a", "b", "c", "d"], 2);
这是

@oumnya-Benhassou的回答的一个稍微清晰的版本:

function chunkArrayInGroups(arr, size) {
  var output = [];
  var count = 0;
  while (count < arr.length) {
    // while our count is less than array length, take the sub array by slicing
    var slice = arr.slice(count, count + size);
    // add this sub array to the output array
    output.push(slice);
    // increment count by size
    count += size;
  }
  return output;
}
function chunkArrayInGroups(arr, size) {
    var holderArray = [];
    for (var i = 0; i < arr.length; i = i + size) {
        holderArray.push(arr.slice(i, i + size));
  }
  return holderArray;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);

当我这样做时,无法弄清楚如何使用切片方法,但是使用 splice 方法应该更容易理解。

function chunkArrayInGroups(arr, size) {
// Break it up.
var firstArray = arr;
var newArray = [];
//set loop condition to the length of the array, so it reduces by "size" every 
//time it loops and the .splice() method is called.
while (firstArray.length>0){       
  newArray.push(firstArray.slice(0,size));
  firstArray.splice(0, size);
 }
return newArray;
}

希望这有帮助。

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

这里:

  • "times"变量表示循环将被执行的次数。

例如:考虑这个数组 (["a","b","c","d","e"], 2(
这里的时间 = 3

在第一个循环中,["a"、"b"]

在第二个循环中,["c", "d"]

第三个循环,["e"]

很干净

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

return placeholder;
}

首先,我们创建一个空数组。我们创建一个 for 循环,但没有 i++,因为我们想分块移动。我们将切片数组推入新的空数组中。切片(i+=大小(在这里工作因为切片 (x,y( 从 x 开始,到 y-1 结束(如果您愿意,不包括 y(。

function chunk(arr, size) {
  // Break it up.
  var i=0,j=size,pack=[],arrOutput=[];
  var loop=(arr.length/size);
  for(k=0;k<loop;k++){
    pack=arr.slice(i,j);
    arrOutput.push(pack);
    pack=[];
    i=j;
    j=i+size;
  }
  return arrOutput;
}

我使用动态指针ij通过size剪切原始数组,然后push到输出数组中。

    function chunk(arr, size) {
  // Break it up.
  var newarr=[];
  var Len = Math.floor(arr.length/size);
  var len = arr.length;
  var num =len%size;
  if (num===0) {
  for (var i = 0; i < Len; i++) {
    newarr.push(arr.splice(0,size));
  }
  }
  else{
    for (var j = 0; j < Len; j++) {
    newarr.push(arr.splice(0,size));    
  }
  newarr.push(arr.splice(0,num));
  }
  return newarr;
  }

编写一个函数,将数组(第一个参数(拆分为大小长度的组(第二个参数(,并将它们作为二维数组返回。

function chunkArrayInGroups(arr, size) {
  var chunkArray = [];
  for (var i = 0, len = arr.length; i <= Math.floor(len / size); i++) {
    if (arr.length) chunkArray.push(arr.splice(0, size));
  }
  return chunkArray;
}
console.log(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 4))

我是这样做的。 希望对您有所帮助。

 function chunkArrayInGroups(arr, size) {
  var myArr = [];
  var loopCount = Math.ceil(arr.length/size);
  var pos = 0;
  for (var i = 0; i < loopCount; i++){
    myArr.push(arr.slice(pos, size + pos));
    pos += size;
  }
  return myArr;
}
chunkArrayInGroups(["a", "b", "c", "d"], 3);

这是另一种解决方案!

function chunkArrayInGroups(arr, size) {
  // Break it up.
  var result = [];
  var s = 0; // Begin of the slice.
  for (var i = 0; i < arr.length; i++) {
    // It goes like slice(0, 2+0), then slice(2, 2+2), slice(4, 4+2).
    // We increment s by 2 when we add to the array.
    var n = arr.slice(s, size+s);
    // Only add when slicing is not empty to prevent empty values.
    if (n.length !== 0) {
      result.push(n);
      s += size;  // Increment s by 2.
    }

  }
  return result;
}
chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3);