Rumah > Soal Jawab > teks badan
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.
为情所困2017-06-26 10:52:17
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:
typecho2017-06-26 10:52:17
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
}
欧阳克2017-06-26 10:52:17
@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)});