【问题标题】:free code camp -> Bonfire: Chunky Monkey免费代码营 -> 篝火:矮胖的猴子
【发布时间】:2015-08-05 17:13:59
【问题描述】:

此篝火来自免费代码营。

这个篝火的任务如下:

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

我的代码如下:

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

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

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

[ [], [] ]

谁能告诉我怎么了?

【问题讨论】:

  • 这是什么语言?
  • 哦,对不起,是javascript
  • 好悲痛,十五个“答案”,没有一个甚至试图回答这个代码为什么不起作用的问题; 每一个只是另一个人在原始编码练习中的尝试!

标签: javascript arrays


【解决方案1】:
function chunk(arr, size) {
 var arr2 =[],
 i=0;
 while( i< arr.length){
  arr2.push(arr.slice(i,i+=size));
 }
 return arr2;
}

【讨论】:

  • 这是我的篝火解决方案。希望对你有帮助
  • 你应该解释你的答案。
【解决方案2】:

空格无关紧要。我不完全理解你的问题。你得到错误数据的理由是什么?

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

【讨论】:

    【解决方案3】:

    这是我写的答案。它正在工作。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:
        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);
        

        【讨论】:

        • 请在您的答案中添加解释。
        【解决方案6】:

        我做的时候不知道怎么只使用 slice 方法,但是使用 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;
        }
        

        希望这会有所帮助。

        【讨论】:

          【解决方案7】:
          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"]

          【讨论】:

            【解决方案8】:

            这很干净

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

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

            【讨论】:

              【解决方案9】:
              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将原来的Array切割成size,然后将push切割成outputArray。

              【讨论】:

                【解决方案10】:
                    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;
                  }
                

                【讨论】:

                • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
                【解决方案11】:

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

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

                【讨论】:

                  【解决方案12】:

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

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

                  【讨论】:

                    【解决方案13】:

                    这是另一个解决方案!

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

                    【讨论】:

                      【解决方案14】:

                      这个问题有点棘手?

                      function chunkArrayInGroups(arr, size) {
                          let new_arr = [];
                          let temp = [];
                          for(let i = 0; i<arr.length; i += size){
                              for(let j = 0 + i; j<size + i ; j++) {
                                  if(arr[j] != undefined){
                                    temp.push(arr[j])
                                  }
                              }
                              new_arr.push(temp)
                              temp = [];
                          }
                          console.log(new_arr)
                          return new_arr;
                          
                      }
                      chunkArrayInGroups([0, 1, 2, 3, 4, 5], 4);

                      运行片段或者你也可以尝试:chunkArrayInGroups(["a", "b", "c", "d"], 2) 应该返回 [["a", "b"], ["c", "d"]]。

                      输出:

                      [["a", "b"], ["c", "d"]]
                      

                      【讨论】:

                        猜你喜欢
                        • 2016-10-31
                        • 1970-01-01
                        • 2021-03-11
                        • 1970-01-01
                        • 2015-09-24
                        • 1970-01-01
                        • 2012-02-24
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多