块数组成组 - 我的代码出了什么问题?

时间:2017-10-11 13:31:21

标签: javascript arrays algorithm loops logic

以下是代码:

function chunkArrayInGroups(arr, size) {
  // Break it up.
  var newArr =[];
  for(var i = 0;i < arr.length;i++){
    for(var j = 0;j < size;j++){
      newArr.push(arr.splice(0,size));
    }
  }
  var result = [];
  for(i = 0;i < newArr.length;i++){
    if(newArr[i].length != 0){
      result.push(newArr[i]);
    }
  }
  return result;
}

chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7,8], 2);

这应该返回 - [[0, 1], [2, 3], [4, 5], [6, 7], [8]]。但是,代码返回[[0, 1], [2, 3], [4, 5], [6, 7]]。另外,如果我的输入数组是([0,1,2,3,4,5,6,7,8,9,10],2),我的代码将按预期返回。

P.S:我特意想找到这个代码的错误,而不是完全不同的代码/方法。

3 个答案:

答案 0 :(得分:1)

基本上你只需要一个循环,因为你拼接了数组并获取了一大块所需的大小。

此行为可用于循环,直到数组的长度为零并退出循环。

在这种情况下,结果已准备就绪。

&#13;
&#13;
function chunkArrayInGroups(arr, size) {
    var newArr = [];
    // for (var i = 0; i < arr.length; i++) {
    while (arr.length) {                        // add this for looping and checking
        // for (var j = 0; j < size; j++) {
        newArr.push(arr.splice(0, size));       // keep this for doing the work!
        // }
    }
    // var result = [];
    // for (i = 0; i < newArr.length; i++) {
    //     if (newArr[i].length != 0) {
    //         result.push(newArr[i]);
    //     }
    // }
    // return result;
    return newArr;                              // return only newArray
}

console.log(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2));
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以执行以下操作:

var size = 2;
var arr = [0,1,2,3,4,5,6,7,8];
var newArray = [];
for(var i = 0; i < arr.length; i+=size){
    newArray.push(arr.slice(i,i+size))
}
console.log(newArray); //will output [[0,1],[2,3],[4,5],[6,7],[8]]

答案 2 :(得分:0)

你的问题是你没有处理数组中剩余数量小于给定arr.length < size的情况,换句话说是function chunkArrayInGroups(arr, size) { // Break it up. var newArr =[]; while(size<arr.length){ newArr.push(arr.splice(0, size )); } if(arr.length<size){ newArr.push(arr); } } 时的情况,所以数组中剩余的项目赢了在块数组中不予考虑。

您需要对其进行测试,我更新了您的代码,使其完美运行:

function chunkArrayInGroups(arr, size) {
  // Break it up.
  var newArr =[];
  while(size<arr.length){
      newArr.push(arr.splice(0, size));
  }
  if(arr.length<size){
      newArr.push(arr);
  }
  return newArr;
}

console.log(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7,8], 2));

<强>演示:

result

注意:

不需要使用newArr数组,因为它只是newArr的副本,您只需返回rundll32.exe python27.dll,PyRun_SimpleString "import myScript.py" 而不复制它。