递归循环遍历对象以构建属性列表

2024-04-29

情况:我有一个包含多个子对象和子子对象的大对象,其属性包含多种数据类型。出于我们的目的,该对象看起来像这样:

var object = {
    aProperty: {
        aSetting1: 1,
        aSetting2: 2,
        aSetting3: 3,
        aSetting4: 4,
        aSetting5: 5
    },
    bProperty: {
        bSetting1: {
            bPropertySubSetting : true
        },
        bSetting2: "bString"
    },
    cProperty: {
        cSetting: "cString"
    }
}

我需要循环遍历这个对象并构建一个显示层次结构的键列表,因此列表最终看起来像这样:

aProperty.aSetting1
aProperty.aSetting2
aProperty.aSetting3
aProperty.aSetting4
aProperty.aSetting5
bProperty.bSetting1.bPropertySubSetting
bProperty.bSetting2
cProperty.cSetting

我有这个函数,它确实循环遍历对象并吐出键,但不是分层的:

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

有人可以让我知道该怎么做吗?这是一个供您使用的 jsfiddle:http://jsfiddle.net/tbynA/ http://jsfiddle.net/tbynA/


我制造了一个FIDDLE http://jsfiddle.net/tbynA/1/为你。我正在存储一个stackstring,然后输出它,如果属性是原始类型:

function iterate(obj, stack) {
        for (var property in obj) {
            if (obj.hasOwnProperty(property)) {
                if (typeof obj[property] == "object") {
                    iterate(obj[property], stack + '.' + property);
                } else {
                    console.log(property + "   " + obj[property]);
                    $('#output').append($("<div/>").text(stack + '.' + property))
                }
            }
        }
    }

iterate(object, '')

Update: 17/01/2019

曾经有一个不同的实现,但它不起作用。看这个答案 https://stackoverflow.com/a/53620876/2120289一个更漂亮的解决方案

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归循环遍历对象以构建属性列表 的相关文章