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

时间:2015-08-05 17:14:00

标签: javascript arrays

这个篝火来自免费代码营。

本篝火的任务如下:

  

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

我的代码如下:

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 ] ]

(我希望并认为空格无关紧要。请告诉我是不是这样)

但它并没有在我写的内容中看到这一点。它只是看到

[ [], [] ]

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

14 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

空间无关紧要。我完全不明白你的问题。你得到的错误数据是什么参数?

我认为代码中的一个大问题是你的函数正在操纵全局范围内的变量。将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>

答案 2 :(得分:0)

这是我写的答案。它正在发挥作用。

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

答案 3 :(得分:0)

这是@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;
}

答案 4 :(得分:0)

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

答案 5 :(得分:0)

当我这样做时,无法弄清楚如何使用切片方法来做到这一点,但使用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;
}

希望这有帮助。

答案 6 :(得分:0)

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

下面:

  • &#34;倍&#34;变量表示循环执行的次数。

例如: 考虑一下这个数组([&#34; a&#34;,&#34; b&#34;&#34; c&#34;&#34; d&#34;&#34; e&#34;] ,2)
这里时间= 3

在第一个循环中,[&#34; a&#34;,&#34; b&#34;]

在第二个循环中,[&#34; c&#34;,&#34; d&#34;]

第三循环,[&#34; e&#34;]

答案 7 :(得分:0)

这很干净

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


return placeholder;
}

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

答案 8 :(得分:0)

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剪切为outputArray。

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

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

答案 11 :(得分:0)

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

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

答案 12 :(得分:0)

另一个解决方案选项 -

function chunkArrayInGroups2(arr , size) {
  var b = [];
  for (;arr.length > 0; arr=arr.slice(size)) {
    b.push(arr.slice(0, size));
  }
  return b;
}

答案 13 :(得分:0)

这是另一种解决方案!

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