代码之家  ›  专栏  ›  技术社区  ›  Z_z_Z

递归创建n级嵌套数组?

  •  2
  • Z_z_Z  · 技术社区  · 7 年前

    我想定义一个函数,该函数将创建一个嵌套数组,该数组有n个级别,每个级别1数组中有n个元素。

    例如,下面的代码适用于两个级别:

     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 回复  |  直到 7 年前
        1
  •  1
  •   theAlexandrian    7 年前

    以下是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], [...], ...], ...]