遞歸呼叫 - javascript遞歸數組遞歸問題
阿神
阿神 2017-06-26 10:50:17
0
3
891

現在有個需求,需要根據服務端請求的數據,組裝成一個樹節點,也就是parent-child節點,服務端請求後的數據結構如下圖,topology是一個object,object下面的key是一個parent,value是child數組。

#例如上圖的1有一個child是一個陣列["2"],這個value為2的child又有4個child,也就是["29","39","38","37 "]

最後需要產生以下資料結構,即key是parent的string,child因為有多個,所以是一個陣列

const data = ["1":["2":["29":["24":["27":["26"]]],"39":["47"],"38":["43":["45"]],"37":["42":["46"]]]]]

又先謝過了。

阿神
阿神

闭关修行中......

全部回覆 (3)
为情所困
var topology = [ ... ]; function rebuildTopo(index) { var topo = topology[index]; var check = false; if(!topo) { return null; } else if(topo instanceof Array) { var obj = {}; for(var j in topo) { var t = topo[j]; obj[t] = rebuildTopo(t); if(!!obj[t]) check = true; } if(check) return obj; else return Object.keys(obj); } } console.log(JSON.stringify({1: rebuildTopo(1)}));

結果:

    typecho

    你要產生的資料應該是這種形式吧:

    { key: '1', children: [{ key: '2', children: [...] }] }
    function appendChildren (data, key = '1') { const node = { key } if (Array.isArray(data[key])) { node.children = data[key].map(child => appendChildren(data, child)) } return node }
      学霸

      @cool_zjy 多謝。
      是的,需要你這種資料結構,問題描述裡沒有寫清楚,抱歉。
      現在這個遞歸後的數據,需要塞入到antd的treenode裡面,也就是每個parent需要由child組成Treenode,例如這樣(舉個例子,children節點沒有全部寫出來)。

                             

      這個是官方文檔,以下程式碼是我的實作(參考了官方文檔裡的非同步資料載入部分的程式碼),不過報錯了。
      https://ant.design/components...

      const appendChildren = (data, key = '1') => { const node = { key } if (Array.isArray(data[key])) { node.children = data[key].map(child => appendChildren(data, child)) } return node } const firstKey = Object.keys(topology)[0]; //这里的topology是服务端返回的数据 const result = [appendChildren(topology,firstKey)]; const loop = data => data.map((item) => { if (item.children) { return {loop(item.children)}; } return ; }); this.setState({treeData:loop(result)});
        最新下載
        更多>
        網站特效
        網站源碼
        網站素材
        前端模板
        關於我們 免責聲明 Sitemap
        PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!