2015-09-04 29 views
1

我想創建MLM類型樹結構。我有數組ARR及其所有孩子,並且ARR數組包含其中存在的所有子數組。用javascript數組創建MLM類型樹結構

例子:

ARR['MainArr'] = aray('child1'=>'child1 val', 'child2'=>'child2 val'); 

ARR['child1'] = array('subchild1'=>'subchild1 val'); 

ARR['child2'] = array('...'=>'...'); 

ARR['subchild1'] = array('...'=>'...'); 

等等...

我想循環中的所有這些陣列遞歸不使用任何功能(如果可能)獲取並輸出其所有子孩子的錢櫃打印所有的孩子。

在以下示例中,parsedAllSpurs數組包含所有子子節點,就像ARR數組。

tmpHN = spurs.hostname; 
while(typeof(parsedAllSpurs[tmpHN]) !== 'undefined'){ 
    if(typeof(parsedAllSpurs[tmpHN]) !== 'undefined'){ 
     $.each(parsedAllSpurs[tmpHN], function(k, allSpurs){ 
      tmpHN1 = allSpurs.hostname; 
      log(tmpHN1); 
      log(allSpurs); 

      while(typeof(parsedAllSpurs[tmpHN1]) !== 'undefined'){ 
       if(typeof(parsedAllSpurs[tmpHN1]) !== 'undefined'){ 
        $.each(parsedAllSpurs[tmpHN1], function(j, allSpurs1){ 
         tmpHN2 = allSpurs1.hostname; 
         //log(tmpHN2); 
         log(allSpurs1); 

         while(typeof(parsedAllSpurs[tmpHN2]) !== 'undefined'){ 
          if(typeof(parsedAllSpurs[tmpHN2]) !== 'undefined'){ 
           $.each(parsedAllSpurs[tmpHN2], function(l, allSpurs2){ 
            tmpHN2 = allSpurs2.hostname;  
            log(allSpurs2); 

           }) 

          } 
         } 

         tmpHN1 = allSpurs1.hostname; 
        });             
       } 
      } 

      tmpHN = allSpurs.hostname; 
     }); 
    } 
+0

你的代碼是否在函數中? – aldrin27

+0

我並沒有真正瞭解你的'parsedAllSpurs' JavaScript對象的結構。你能否在你的代碼中包含一個例子?像'var parsedAllSpurs = '。 「spurs.hostname」從哪裏來?什麼是「spurs」變量? – mhall

+0

以下是parsedAllSuprs的結構,但它的PHP數組,以後轉換成JSON對象'陣列 ( 'MIBHRAWLESR001'=>數組 ( 0 =>數組 ( '主機'=> 'MIBHVENKESR001' '媒體類型 '=> '微波爐' ) 1 =>數組 ( '主機'=> 'ABCDEF000' '媒體類型'=> '微波爐' ) 2 =>數組 ( '主機'=>' MIBHSLSRESR001' 'media_type'=>'微波' ) ) )' – Amol

回答

0

使用遞歸替代嵌套循環https://en.wikipedia.org/wiki/Recursion。 創建一個級別的函數,每次找到嵌套結構時調用該函數。

function processStructure(data){ 
    processData(data); 
    if(hasChildren(data)){ 
     processStructure(data); 
    } 
} 
processStructure(initialData); 

希望這會有所幫助。

+0

我們不能不使用函數,就像我們可以使用while或foreach一樣 – Amol

+0

在您的示例中,每個函數都創建匿名函數,但是函數有什麼問題?你的代碼包含複製粘貼,如果你有更多的級別呢?你會再複製一次嗎?如果在你需要添加數據處理之後呢?你會寫它到每個功能? –