如何迭代对象中的内部对象/属性

时间:2011-03-25 13:19:19

标签: javascript object iteration

我有一个对象,其内部对象和属性定义如下:

var obj = {obj1 : { "prop1" : "nothing", "prop2" : "prop"},
        obj2 : {"prop1" : "nothing", "prop2" : "prop"},
        pr1 : "message",
        pr2 : "mess"
};

通常迭代一个对象的每个属性,for .. in循环可以做到这一点

for (property in obj){
    if (obj.hasOwnProperty(property)){
        console.log(property + "   " + obj[property]);
    }
}

控制台显示:

obj1 [object Object]
obj12 [object Object]
pr1 message
pr2 mess

但是如何迭代内部对象(obj1, obj2)及其自己的属性(prop1,prop2)?

4 个答案:

答案 0 :(得分:35)

递归是你的朋友:

function iterate(obj) {
    for (var property in obj) {
        if (obj.hasOwnProperty(property)) {
            if (typeof obj[property] == "object")
                iterate(obj[property]);
            else
                console.log(property + "   " + obj[property]);
        }
    }
}

注意:不要忘记使用property在本地声明var

答案 1 :(得分:10)

这是伟大的安卓,虽然没有涵盖阵列案例,但这是我的贡献:

var getProps = function (obj) {
    for (var property in obj) {
        if (obj.hasOwnProperty(property) && obj[property] != null) {
            if (obj[property].constructor == Object) {
                getProps(obj[property]);
            } else if (obj[property].constructor == Array) {
                for (var i = 0; i < obj[property].length; i++) {
                    getProps(obj[property][i]);
                }
            } else {
                console.log(obj[property]);
            }
        }
    }
}
getProps(myObject);

答案 2 :(得分:5)

您可以使用递归来实现:

function Props(obj) {

 function getProps(obj){
  for (var property in obj) {
    if (obj.hasOwnProperty(property)){
        if (obj[property].constructor == Object) {
           console.log('**Object -> '+property+': ');
           getProps(obj[property]);
        } else {
           console.log(property + " " + obj[property]);
        }
    }
  }
 }
 getProps(obj);
}

请参阅http://jsfiddle.net/KooiInc/hg6dU/

答案 3 :(得分:5)

要简单地显示对象结构,我经常使用:console.log(JSON.stringify(obj))