注意:下面的解決方案!如何創建對象的平面數組,樹陣,然後在每個級別編號每個樹節點的水平和排序的節點?
問題: 我所需的代碼把有ID和父值對象的扁平陣列成一棵樹。由於平面陣列是動態生成的,所以深度級別數量未知。另外,一旦項目在樹中,我需要爲節點分配一個級別屬性值,具體取決於它們所處的樹級別(根節點=級別0,根節點的子節點=級別1,兒童的孩子= 2級等)。
最後,在每個樹級別的節點應該通過阿爾法其ID進行排序。所以根ID應該進行排序,然後根部孩子,那麼孩子的孩子,等等等等
我找到了一些解決方案,滿足至少兩個我的要求,但沒有能夠滿足所有三個。
解決方案:jsfiddle
var x = [
{id: 10, parent: 0, children: []},
{id: 20, parent: 10, children: []},
{id: 30, parent: 10, children: []},
{id: 40, parent: 30, children: []},
{id: 50, parent: 30, children: []},
{id: 60, parent: 30, children: []},
{id: 70, parent: 20, children: []},
{id: 80, parent: 20, children: []},
{id: 90, parent: 40, children: []},
{id: 100, parent: 40, children: []},
{id: 95, parent: 40, children: []},
{id: 110, parent: 50, children: []},
{id: 120, parent: 60, children: []},
{id: 130, parent: 0, children: []},
{id: 140, parent: 130, children: []},
{id: 150, parent: 140, children: []},
{id: 160, parent: 140, children: []},
{id: 170, parent: 140, children: []},
{id: 180, parent: 160, children: []},
{id: 190, parent: 160, children: []},
{id: 200, parent: 190, children: []}
];
進入這個:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<ul>
<li>10
<ul>
<li>20
<ul>
<li>70</li>
<li>80</li>
</ul>
</li>
<li>30
<ul>
<li>40
<ul>
<li>90</li>
<li>95</li>
<li>100</li>
</ul>
</li>
<li>50
<ul>
<li>110</li>
</ul>
</li>
<li>60
<ul>
<li>120</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>130
<ul>
<li>140
<ul>
<li>150</li>
<li>160
<ul>
<li>180</li>
<li>190
<ul>
<li>200</li>
</ul>
</li>
</ul>
</li>
<li>170</li>
</ul>
</li>
</ul>
</li>
</ul>
</body>
</html>
謝謝,尼娜。我喜歡你的方法,我從來沒有見過以前使用過的「警衛操作員」(我不得不在谷歌中如何使用&&來賦值賦值,並確定是否應該執行一個函數)。不過,您的代碼缺少兩項要求。 1)所有節點必須在每個級別進行alpha排序。在40節點下,它應該是90,95和100個子節點。 2)儘管我沒有在DOM結果中顯示它,但我希望爲每個節點分配一個等級屬性值,該值等於樹中的位置。 –
順便說一句,你的排序是不是阿爾法,但數值,監守阿爾法各種'「100」 <「90」 <「95」,但你需要治療值數(它們是什麼)。 –
排序錯誤的好處。我更新了我的答案和jsfiddle。 –