zoukankan      html  css  js  c++  java
  • 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
    }
  • 相关阅读:
    360删除、修改注册表问题
    朗姆达表达式类似IN查询条件
    SQL 分组排序、CASE...WHEN...、是否为空 查询
    Excel 复制Sql查询结果错位
    redis实现购物车秒杀原理
    sphinx的使用
    linux安装
    linux和windows的区别
    Yii2.0实现语言包切换功能
    Linux的7个级别
  • 原文地址:https://www.cnblogs.com/natsu07/p/8436626.html
Copyright © 2011-2022 走看看