2014-11-25 122 views
0

我与JSON对象的工作:迭代对象中的对象

var someobj = { 
'key':'value', 
'key':'value', 
'objectkey':{'key':'value','key':'value'} 
} 

虽然迭代,我想结果的console.log为:

KEY: key && VALUE: value 
KEY: key && VALUE: value 
OKEY: key && OKEYVALUE: value 

虽然迭代我只得到了第一级,我似乎无法将其纳入作为对象的值中。我想某种长度可以工作:

编辑2:现在,这个内部循环迭代,我得到外部值的字母,内部值完全记录。

var registration_form = { 
    'registration_form':{ 
     'Display Name':'input', 
     'Username':{'inpute':'text','id':'some_id'}, 
     'Password':'input', 
     'Email':'input', 
     'Captcha':'input' 
    } 

}; 
function iterateNodes(data) { 
    for (var key in data){ 
     var obj = data[key]; 

     for(var prop in obj){ 
      if(obj.hasOwnProperty(prop)){ 
       var inobj = obj[prop]; 
       for(var prop in inobj){ 
        console.log(inobj[prop]) 
       } 
      }else{ 
       console.log(obj) 
      } 

     } 
    } 
} 
iterateNodes(registration_form); 
+3

您是否尝试过使用简单的fo r循环? – dfsq 2014-11-25 10:15:04

+0

请花几分钟时间,并创建一个有意义的例子。你至少应该有唯一的键和不同的值,以便明确输入和输出之间的连接是什么。 – zerkms 2014-11-25 10:15:40

+0

让我修复 – 2014-11-25 10:18:37

回答

0

请尝试了这一点:

<script 
    src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
<script> 

    var someobj = { 
     'key1':'value1', 
     'key2':'value2', 
     'objectkey3':{'key01':'value01','key02':'value02'} 
    }; 

    jQuery.each(someobj, function(i, val) { 

     if (typeof val == 'string'){ 
      console.log("key : "+i+" value: "+val); 
     }else{ 

      jQuery.each(val, function(j, val2) { 
       console.log("key : "+j+" value: "+val2); 
      }); 
     } 
     }); 
</script> 
+0

非常感谢您的尝试,它只针对包含对象的值迭代第一级返回对象Object。 ( – 2014-11-25 10:26:04

+0

现在请尝试,我编辑了我的答案 – 2014-11-25 10:39:31

+0

检查它的字符串或对象听起来不错,但由于某种原因它又返回第一级的想法 – 2014-11-25 10:44:59

0

一般来说,你可以在这样一个对象的属性迭代:

for (var k in o) { 
    if (o.hasOwnProperty(k)) { 
     console.log('k: ' + k + ', v: ' + o[k]) 
    } 
} 

所以你可以用递归去更深比一个级别

function hasproperty(o) { 
    if (typeof o === 'object') { 
     for (var k in o) { 
      if (o.hasOwnProperty(k)) { 
       return true; 
      } 
     }  
    } 

    return false; 
}; 

function iterate(o) { 
    for (var k in o) { 
     if (o.hasOwnProperty(k)) { 
      if (hasproperty(o[k])) { 
       console.log('within ' + k); 
       iterate(o[k]); 
       console.log('exit ' + k); 
      } else { 
       console.log('K: ' + k + ', V:' + o[k]); 
      } 
     } 
    } 
}; 
+0

看起来对我来说好,即时通讯将尝试这一点,我喜欢递归和itterate函数,有点打破逻辑非常好 – 2014-11-25 10:50:11

+0

我似乎无法得到这个工作,你可以尝试这在给定的示例对象的问题请? – 2014-11-25 10:57:56

+0

谢谢你的回答,我有你需要的答案!祝你有美好的一天! – 2014-11-25 11:11:21