簡體   English   中英

如何將平面多分支數據轉換為分層 JSON?

[英]How to convert flat multi-branch data to hierarchical JSON?

[
  {
    "id": "a",
    "pid": "a",
    "name": "AA",
  },
  {
    "id": "b",
    "pid": "a",
    "name": "BB",
  },
  {
    "id": "c",
    "pid": "a",
    "name": "CC",
  },
  {
    "id": "x",
    "pid": "b",
    "name": "XX",
  }
]

以上是我從數據庫中得到的數據。 每個人都有一個id和一個pidpid指向這個人的更高級別的人的id 如果一個人的級別最高,則id等於pid

我想將原始數據轉換為分層 JSON,如下所示:

[
  {
    "id": "a",
    "name": "AA",
    "child": [
      {
        "id": "b",
        "name": "BB"
        "child": [
          {
            "id": "x",
            "name": "XX"
          }
        ]
      },
      {
        "id": "c",
        "name": "CC"
      }
    ]  
  }
]

我正在使用 Node.js。

我建議您創建一棵樹並以id === pid作為樹的根,這適用於未排序的數據。

它是如何工作的:

基本上,對於數組中的每個對象,它都將構建新對象的id作為新對象的parentid

例如:

 { "id": 6, "pid": 4 }

它首先使用id生成此屬性:

 "6": { "id": 6, "pid": 4 }

然后使用pid

 "4": { "children": [ { "id": 6, "pid": 4 } ] },

雖然所有對象都被類似地處理,但我們最終得到了一棵樹。

如果id === pid ,則找到根節點。 這是以后返回的對象。

 var data = [ { "id": "f", "pid": "b", "name": "F" }, { "id": "e", "pid": "c", "name": "E" }, { "id": "d", "pid": "c", "name": "D" }, { "id": "c", "pid": "b", "name": "C" }, { "id": "a", "pid": "a", "name": "A" }, { "id": "b", "pid": "a", "name": "B" } ], tree = function (data) { var r, o = Object.create(null); data.forEach(function (a) { a.children = o[a.id] && o[a.id].children; o[a.id] = a; if (a.id === a.pid) { r = a; } else { o[a.pid] = o[a.pid] || {}; o[a.pid].children = o[a.pid].children || []; o[a.pid].children.push(a); } }); return r; }(data); console.log(tree);

受妮娜的回答影響,這是我的決心,僅供記錄。

 function corrugate(data){ var root = ""; return data.reduce((t,o) => { o.id === o.pid && (root = o.id); t[o.id] ? t[o.id].name = o.name : t[o.id] = {id: o.id, name: o.name}; t[o.pid] ? o.pid !== o.id ? t[o.pid].children.push(t[o.id]) : t[o.pid].children = t[o.pid].children || [] : t[o.pid] = {id: o.pid, children: [t[o.id]]}; return t; },{})[root]; } var data = [{ "id": "f", "pid": "b", "name": "F" }, { "id": "e", "pid": "c", "name": "E" }, { "id": "b", "pid": "a", "name": "B" }, { "id": "d", "pid": "c", "name": "D" }, { "id": "c", "pid": "b", "name": "C" }, { "id": "a", "pid": "a", "name": "A" } ]; console.log(corrugate(data));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM