2010-09-29 126 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