创建嵌套数据(JSON或数组)

Tob*_*rto 5 javascript json

我有以下结构的零件清单:

level | description
    0 | sfg
    1 | sdf
    2 | asdisg
    3 | sidjhf
    4 | wefdsj
    4 | asdfg
    4 | sgfd
    4 | sdg
    3 | sfg
    3 | fdg
    4 | sdfg
    4 | sdsfd
    4 | sdf
    4 | sdf
    2 | adf
    3 | sdfg
    4 | sdg
    4 | sdf
    4 | sdf
    4 | sdf
    1 | shfg
    2 | ijsd
    3 | ijsd
    4 | sdf
    4 | sdf
Run Code Online (Sandbox Code Playgroud)

我需要将零件列表转换为这样的层次结构文件夹结构(在嵌套JSON中更可取): 在此处输入图片说明

我想在TypeScript中使用以下结构:

export interface Foo {
  level: number;
  description: string;
  children?: Foo[];
}
Run Code Online (Sandbox Code Playgroud)

我需要的是一个嵌套的JSON对象或类似嵌套数组的东西,其中该数组包含具有另一个数组的子级。

不幸的是,我只显示了伪代码(我知道,这永远行不通):

  recursiveWalker(List, lastLevel, parent) {
    for (let i = 0; i < List.length; ++i) {
      const node = {
        description: List.description,
        level: List.level
      };
      if (List.level === lastLevel + 1) {
        node.children = this.recursiveWalker(List, lastLevel + 2, node);
      }
    }
    return node;
  }
Run Code Online (Sandbox Code Playgroud)

我的问题现在是:是否存在创建此类嵌套数据的简单解决方案?我是否必须使用递归函数,或者可以实现任何算法?

目标是使用此数据在Angular(https://material.angular.io/components/tree/overview)中创建材质树。

我真的很感谢任何帮助!

更新: 将需要以下结构:

  const bar: Foo = {
    description: 'this is level 0 (root)',
    level: 0,
    children: [{
      description: 'this is level 1',
      level: 1,
      children: [
        {
          description: 'this is level 2',
          level: 2
        },
        {
          description: 'this is level 2',
          level: 2
        },
        {
          description: 'this is level 2',
          level: 2,
          children: [
            {
              description: 'this is level 3',
              level: 3
            },
            {
              description: 'this is level 3',
              level: 3
            },
            {
              description: 'this is level 3',
              level: 3,
              children: [] /* AND SO ON .... */
            }
          ]
        }
      ]
    }]
  };
});
Run Code Online (Sandbox Code Playgroud)