递归创建n级嵌套数组?

时间:2018-01-02 19:13:26

标签: javascript arrays recursion

我想定义一个函数,该函数将创建一个n级深度的嵌套数组,每个level-1数组中包含n个元素。

因此,例如,下面的代码适用于2个级别:

 function genMatrix() {
    const matrix = [];
    let total = 0;
    for(let i=0; i<2; i++) {
      matrix[i] = [];
      for(let j=0; j<2; j++) {
        total++;
        matrix[i][j] = total;
      }
    }
    return matrix;
  }

这将输出以下内容:[ [ 1, 2 ], [ 3, 4 ] ]

我知道我可以通过简单地添加更多嵌套循环来扩展同样的想法。但我想要一个能生成任何级别的类似数组的函数。

这样的事情:

function genMatrix(levels) {... return matrix}

我试图递归地做这件事,但我没有走得太远:(

那么我怎样才能编写一个递归函数,以与上面例子类似的方式创建任何深度的数组?

1 个答案:

答案 0 :(得分:1)

这是n级嵌套数组生成器:

function getMatrix(n) {
  var total = 0, levels = n;
  function genMatrix(n) {
    var matrix = [];
    for (var i = 0; i < levels; i++) {
      matrix.push(n ? genMatrix(n - 1) : ++total);
    }
    return matrix;
  }
  return genMatrix(n)[0];
}

测试:

console.log(getMatrix(2));
// → [[1, 2], [3, 4]]

console.log(getMatrix(3));
// → [[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12], [...], ...], ...]