首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >递归地循环遍历对象以构建属性列表

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

Stack Overflow用户
提问于 2013-03-29 03:40:50
回答 16查看 124K关注 0票数 67

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

代码语言:javascript
运行
复制
var object = {
    aProperty: {
        aSetting1: 1,
        aSetting2: 2,
        aSetting3: 3,
        aSetting4: 4,
        aSetting5: 5
    },
    bProperty: {
        bSetting1: {
            bPropertySubSetting : true
        },
        bSetting2: "bString"
    },
    cProperty: {
        cSetting: "cString"
    }
}

我需要遍历这个对象,并构建一个显示层次结构的键的列表,因此该列表最终如下所示:

代码语言:javascript
运行
复制
aProperty.aSetting1
aProperty.aSetting2
aProperty.aSetting3
aProperty.aSetting4
aProperty.aSetting5
bProperty.bSetting1.bPropertySubSetting
bProperty.bSetting2
cProperty.cSetting

我得到了这个函数,它循环遍历对象并输出键,但不是分层的:

代码语言:javascript
运行
复制
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/

EN

Stack Overflow用户

发布于 2019-11-23 05:02:48

此函数可以处理包含对象和对象数组的对象。结果将是对象的每个单项一行,表示其在结构中的完整路径。

使用http://haya2now.jp/data/data.json进行测试

示例结果: geometry6.obs5.hayabusa2.delay_from

代码语言:javascript
运行
复制
function iterate(obj, stack, prevType) {
    for (var property in obj) {
        if ( Array.isArray(obj[property]) ) {
            //console.log(property , "(L="  + obj[property].length + ") is an array  with parent ", prevType, stack);
            iterate(obj[property], stack  + property , "array");
        } else {
            if ((typeof obj[property] != "string")  && (typeof obj[property] != "number"))  {
                if(prevType == "array") {
                    //console.log(stack + "["  + property + "] is an object, item of " , prevType, stack);
                    iterate(obj[property], stack + "["  +property + "]." , "object");
                } else {
                    //console.log(stack +    property  , "is " , typeof obj[property] , " with parent ", prevType, stack );
                    iterate(obj[property], stack  + property + ".", "object");
                }   
            } else {
                if(prevType == "array") {
                    console.log(stack + "["  + property + "] =  "+  obj[property]);

                } else {
                    console.log(stack +    property  , " =  " ,  obj[property] );                       
                }   
            }
        }



    }
}

iterate(object, '', "File")
console.log(object);
票数 0
EN
查看全部 16 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15690706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档