2010-09-29 107 views
0

我想創建一個函數,遞歸循環javascript對象?

當給一個對象將輸出類似

<div> 
reason : ok 
status : 0 
AiStatistics : null 
CurrentSeasonArenaStatistics : null 
<div> 
    Player 
    <div> 
    CampaignProgressCoop : CompletedLegendary 
    CampaignProgressSp : PartialHeroic 
    <div> 
    ReachEmblem 
    <div> 
    background_index : 2 
    change_colors : [0,7,2,0] 
    flags : 0 
    foreground_index : 49 
    </div> 
    </div> 
    </div> 
</div> 
gender : male 
</div> 

如何,我會去嗎?

這是我的嘗試:

function read_object(object){ 
    var $obj = $('<div />'); 
    for(var o in object) { 
    $obj.append(o+' : '); 
    if(typeof(object[o]) == 'object' and object[o] != null) { 
     $obj.append(read_object(object[o])); 
    } 
    else 
     $obj.append(object[o]); 
    } 
    return $obj; 
} 

這裏是我使用

{ 
    "reason":"Okay", 
    "status":0, 
    "AiStatistics":null, 
    "CurrentSeasonArenaStatistics":null, 
    "Player": 
    { 
    "CampaignProgressCoop":"CompletedLegendary", 
    "CampaignProgressSp":"PartialHeroic", 
    "ReachEmblem": 
    { 
     "background_index":2, 
     "change_colors":[0,7,2,0], 
     "flags":0, 
     "foreground_index":49 
    } 
    } 
} 
+0

我沒有采取小便......但是從您的方法中調用您的方法是一個好習慣嗎?它不應該是它自己的方法,也許返回一個字符串爲您的輸出? – Kieran 2010-09-29 06:56:53

+0

好吧,修正,問題是我有$ obj和$ obj2而不是var $ obj和var $ obj2 – Hailwood 2010-09-29 07:00:35

+2

這就是遞歸Kieran背後的整個想法。如果你還不知道遞歸的含義,請看這句話的開頭。 – 2010-09-29 07:01:07

回答

-1

分離出來的方法從主調用的對象。


function read_object(object) 
{ 
    //do some cool stuff to return a string 
    return str; 
} 

function loopy(object) 
{ 
    for(var o in object) 
    { 
     if(typeof(object[o]) == 'object') 
     { 
      read_object(object) 
     } 
     else 
     { 
      //output in some other way 
     } 
    } 
} 
+2

不管你做什麼,你最終都會得到一個遞歸模式。 在你的例子中,你最終只會從read_object調用loopy。 – Hailwood 2010-09-29 07:14:26

+0

是的,這完全只適用於DOM的一個級別。我讀了遞歸。大多數人都說你不需要使用它,並且可能會導致堆棧問題,但它確實節省了代碼 – Kieran 2010-09-30 02:30:19