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

IT技术 javascript object iteration
2021-03-12 00:34:04

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

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个回答

递归是你的朋友:

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!

非常感谢 !如果我忘记声明var属性是真的,属性是全局的
2021-05-02 00:34:04

这是很好的答案,虽然没有涵盖数组案例,但这是我的贡献:

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);
请小心,因为此方法在打印没有对象的数组时存在一些问题,例如:array: ["value1", "value2", "value"] 或 array: [1234, 1234, 1234]。需要验证数组元素是否为对象,否则只打印值
2021-05-11 00:34:04
当属性也可以是字符串时,覆盖数组尤其重要 - 否则您将获得随机垃圾作为输出,或者您将超过调用堆栈大小。+1 为此
2021-05-15 00:34:04

为了简单展示对象结构,我经常使用:console.log(JSON.stringify(obj))

.. 并美化 JSON 输出,JSON.stringify(obj, null, 4).
2021-05-06 00:34:04

您可以使用递归来实现:

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/

答案是正确的,但比第一个晚了几分钟。尽管如此,还是值得一票。
2021-04-19 00:34:04
当然对我来说很好,但也许您应该尝试iterate使用对象中的数组(如{a:[1,2,3], b:3, c:{a:1,b:1}}?
2021-05-10 00:34:04