迭代对象内的对象

时间:2014-11-25 10:13:37

标签: javascript loops object

我正在使用Json Object:

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

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

EDIT2:现在有了这个内部循环,它会迭代,我得到外部值的字母,内部值被完全记录。

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);

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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]);
            }
        }
    }
};