• js对象-平铺与嵌套的互相转换


    一个json对象,包含嵌套关系,传输过来的时候是平铺的,顺序打乱,用parentCode属性来关联,如下

    {
        "1":{
            "name": "中国",
            "code": "1",
            "parentCode":"0"
        },
        "12":{
            "name": "上海",
            "code": "12",
            "parentCode":"1"
        },
        "121":{
            "name": "杨浦区",
            "code": "121",
            "parentCode":"12"
        },
    "13":{
            "name": "南京",
            "code": "13",
            "parentCode":"1"
        },
        "122":{ 
    "name": "嘉定区",
    "code": "122",
    "parentCode":"12"
    }
    }

    parentCode位0的对象是根对象,要求把平铺对象转换成这样的嵌套对象

    [
        {
            "name": "中国",
            "code": "1",
            "parentCode":"0",
            "children":[
                {
                    "name": "上海",
                    "code": "12",
                    "parentCode":"1",
                    "children":[
                        {
                            "name": "杨浦区",
                            "code": "121",
                            "parentCode":"12"
                        },
                        {
                            "name": "嘉定区",
                            "code": "122",
                            "parentCode":"12"
                        }
                    ]
                },
                {
                    "name": "南京",
                    "code": "13",
                    "parentCode":"1"
                }
            ]
        }
    ]

    思路:

    对象是引用变量,直接遍历添加即可,无需按照层级顺序从外到内添加。

    function transfer(origin){
        var root = null;
        Object.keys(origin).forEach(key => {
            var obj = origin[key]
            if (obj.parentCode === '0') {
                root = obj;
                return
            }
            var parent = origin[obj.parentCode];
            !parent.children && (parent.children = [])
            parent.children.push(obj)
        })
        return root
    }
  • 相关阅读:
    [NOIP2008] 提高组 洛谷P1125 笨小猴
    洛谷P3384 【模板】树链剖分
    Bzoj1503 [NOI2004]郁闷的出纳员
    POJ1422 Air Raid
    洛谷P1133 教主的花园
    洛谷P1186 玛丽卡
    HDU5115 Dire Wolf
    POJ1308 Is It A Tree?
    POJ2513 Colored Sticks
    Bzoj2326 [HNOI2011]数学作业
  • 原文地址:https://www.cnblogs.com/natsu07/p/8436626.html
Copyright © 2020-2023  润新知