如何将平面多分支数据转换为分层JSON?

Roc*_*wer 2 javascript algorithm tree node.js

[
  {
    "id": "a",
    "pid": "a",
    "name": "AA",
  },
  {
    "id": "b",
    "pid": "a",
    "name": "BB",
  },
  {
    "id": "c",
    "pid": "a",
    "name": "CC",
  },
  {
    "id": "x",
    "pid": "b",
    "name": "XX",
  }
]
Run Code Online (Sandbox Code Playgroud)

上面是我从数据库中获得的数据。每个人都有一个id和一个pidpid指向该人的较高级别的人id。如果一个人的水平最高,则id等于pid

我想将原始数据转换为分层JSON,如下所示:

[
  {
    "id": "a",
    "name": "AA",
    "child": [
      {
        "id": "b",
        "name": "BB"
        "child": [
          {
            "id": "x",
            "name": "XX"
          }
        ]
      },
      {
        "id": "c",
        "name": "CC"
      }
    ]  
  }
]
Run Code Online (Sandbox Code Playgroud)

我正在使用Node.js。

Nin*_*olz 5

我建议您创建一棵树并将其id === pid作为树的根,这适用于未排序的数据。

怎么运行的:

基本上,对于数组中的每个对象,都需要像id构建新对象一样parentid构建新对象。

例如:

{ "id": 6, "pid": 4 }
Run Code Online (Sandbox Code Playgroud)

它首先使用id以下命令生成此属性:

"6": {
    "id": 6,
    "pid": 4
}
Run Code Online (Sandbox Code Playgroud)

然后用pid

"4": {
    "children": [
        {
            "id": 6,
            "pid": 4
        }
    ]
},
Run Code Online (Sandbox Code Playgroud)

在对所有对象进行类似处理的同时,我们最终得到了一棵树。

如果为id === pid,则找到根节点。这是以后返回的对象。