将数组拆分为特定大小的片段并将其转换为多维数组

时间:2015-07-18 23:35:58

标签: javascript arrays multidimensional-array

function chunk(arr, size) {
  var awn = [];
//sets up an empty array
  if(size < 0) {
    return arr;
  } else if(size === 1) {
    for(var i = 0; i < arr.lenght; i += size) {
      awn.push(arr[i]);
    }
  } else if(size === 2) {
    for(var x = 0; x < arr.length; x += size) {
      awn.push([arr[x], arr[x + 1]]);
    }
  } else if(size === 3) {
    for(var j = 0; j < arr.length; j += size) {
      awn.push([arr[j], arr[j + 1], arr[j + 2]]);
    }
  } else if(size === 4) {
    awn.push([arr[0], arr[1], arr[2], arr[3]],[arr[4], arr[5]]);

  }
  return awn;
}

chunk(['a', 'b', 'c', 'd'], 2);
chunk([0, 1, 2, 3, 4, 5], 4);

这是我为尝试解决这个问题所写的内容,但我认为它可以更加精细地完成,而且只有在尺寸小于4的情况下它才有效。

1 个答案:

答案 0 :(得分:2)

您可以使用reducer,使用余数运算符可以检查何时分割:

function chunk(arr, size) {
  return arr.reduce(function(acc, x, i) {
    if (i % size === 0) {
      acc.push([x])
    } else {
      acc[acc.length-1].push(x)
    }
    return acc
  },[])
}

chunk([0,1,2,3,4,5,6,7,8,9], 4)
//^ [[0,1,2,3], [4,5,6,7], [8,9]]