2014-11-25 97 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