一个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 }