数据格式处理:在指定一个子类的情况下去寻找所有父类,将类listjson转换为类树的json数据

1.原始数据
数据结构为一个二维表list存的树:

    [json1,json2...]
    json的格式为:
    {id,name,...deptPreId(树节点)}

原始数据例子:

 [{"id":1,"deptName":"B","deptFullname":"A_B","deptLevel":2,"deptPreId":2,},

     {"id":2,"deptName":"A","deptFullname":null,"deptLevel":1,"deptPreId":null,},

     {"id":3,"deptName":"C","deptFullname":null,"deptLevel":3,"deptPreId":1,},

    {"id":4,"deptName":"wwxxX","deptFullname":null,"deptLevel":null,"deptPreId":1},

     {"id":5,"deptName":"123124124","deptFullname":null,"deptLevel"2,"deptPreId":1}

    ];

2.目标数据:

将其转换为下面目标数据,也是一个类似的树,有树形层次:
其中如果指定child的list的话如何找到其父和组,并生成相应的树。
数据格式如下:

  list:[json1,json2]
  json:{json,childList}
  Childlist:[json1,json2]

目标数据例子:

data=[
    {"id":2,"deptName":"A","deptFullname":null,"deptLevel":1,"deptPreId":null
    ,
    Child:
      [
        {"id":1,"deptName":"B","deptFullname":"A_B","deptLevel":2,"deptPreId":2,
        Child:
            [
                    
        {"id":3,"deptName":"C","deptFullname":null,"deptLevel":3,"deptPreId":1,}
            ]
         },
        {"id":5,"deptName":"123124124","deptFullname":null,"deptLevel"2,"deptPreId":1}
    ]
}]

通过子类去寻找父类会涉及到父类合并的问题,
比如树形结构:A1->B1->C1,A1->B1->C2,A1->B1->C2->D2,比如我现在要通过list,[D2,C1]去寻找D2,所有的祖辈,当回溯到B1的时候要进行合并,但是C2和D2第几次循环查到C2,D2是不确定的。所以和参考代码给出的解决方法有所区分
类似问题:通过父类去寻找子类https://segmentfault.com/q/10...

阅读 2.2k
2 个回答

找到思路了。
1.用每一个子去追溯,然后将数组存入一个SET
2.最后利用SET将其去重
3.然后利用从父辈进行构建子树:即参考文档给出的链接处理

这也只能说间接达到了效果,实际上并不是从子集完成追溯,如果有更好的方法还请回答一下。

很不明白为什么那么多前端同学都不会这个操作啊。。。
遍历两次解决
第一次遍历,收录所有json到一个对象中,id作为键,建立id到json的映射。
第二次遍历,给所有节点找爹。

可以看我文章,文末有几乎完全一样(除了键名略微不同)的函数。


如有帮助请给个赞,如有疑惑请追问~

推荐问题