Panggilan rekursif - masalah rekursi tatasusunan rekursif javascript
阿神
阿神 2017-06-26 10:50:17
0
3
948

Sekarang ada keperluan Ia perlu dihimpunkan ke dalam nod pokok berdasarkan data yang diminta oleh pelayan, iaitu nod induk-anak Struktur data selepas permintaan pelayan adalah seperti yang ditunjukkan di bawah. dan kunci di bawah objek ialah nilai induk ialah tatasusunan anak.

Sebagai contoh, 1 dalam gambar di atas mempunyai anak yang merupakan tatasusunan ["2"], dan anak dengan nilai 2 mempunyai 4 anak, iaitu, ["29", "39", "38", "37 "]

Akhir sekali, struktur data berikut perlu dijana, iaitu, kuncinya ialah rentetan induk, dan kerana terdapat berbilang anak, ia adalah tatasusunan

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

Terima kasih terlebih dahulu.

阿神
阿神

闭关修行中......

membalas semua(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)}));

Hasil:

typecho

Data yang anda ingin hasilkan hendaklah dalam bentuk ini:

{
  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 Terima kasih.
Ya, saya memerlukan struktur data anda, saya tidak menyatakannya dengan jelas dalam huraian masalah, maaf.
Sekarang data rekursif ini perlu disumbat ke dalam treenode antd, iaitu, setiap ibu bapa perlu terdiri daripada kanak-kanak menjadi Treenode, seperti ini (contohnya, nod kanak-kanak tidak semua ditulis keluar).

        <TreeNode title="1" key="1">
          <TreeNode title="2" key="2">
            <TreeNode title="29" key="29">
                <TreeNode title="24" key="24">
                    <TreeNode title="27" key="27">
                        <TreeNode title="26" key="26" />
                    </TreeNode>
                </TreeNode>
            </TreeNode>
            <TreeNode title="39" key="39">
                <TreeNode title="47" key="47" />
            </TreeNode>
            <TreeNode title="38" key="38">
                <TreeNode title="43" key="43">
                    <TreeNode title="45" key="45" />
                </TreeNode>
            </TreeNode>
            <TreeNode title="37" key="37">
                <TreeNode title="42" key="42">
                    <TreeNode title="46" key="46" />
                </TreeNode>
            </TreeNode>
          </TreeNode>
        </TreeNode>

Ini ialah dokumen rasmi Kod berikut ialah pelaksanaan saya (rujuk kod pemuatan data tak segerak dalam dokumen rasmi), tetapi ralat dilaporkan.
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 <TreeNode title={item.key} key={item.key}>{loop(item.children)}</TreeNode>;
                }
                    return <TreeNode title={item.key} key={item.key} />;
                });
                this.setState({treeData:loop(result)});
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan