非标准树状结构数据的处理
之前笔者写过两篇博客来讲如何处理标准的树状结构数据,分别是 js遍历树形结构方法 和 过滤树形结构数据并获取新的树形结构 。这次就来聊一下如何处理非标准树状结构数据。标准的树状结构数据的下级节点存放的字段是统一的比如说我们常见的children,有一些特别的数据为了语义上更加明确,所以每一级的子级所在的字段都不一样,比如存放省市区标识的数据用cityList存放下级市,areaList存放下级的区。下面来讲一下,如何遍历这种非标准树形结构,并且如何将他们转换成标准的树状结构数据。 先来看一下我们要处理的数据结构,因为内容较多这里就只放出部分截图: 处理树状结构的方法用递归是最适合不过了。这里也顺带讲一下为什么我们不用循环嵌套的方式去遍历树形结构比如每一级的循环都用for,或者是forEach等等。主要的原因是后期难以维护和扩展,比如树状结构再新增一级,要是用for, map, forEach 等遍历,那你就得再写上一层。层级结构会越来越深,而且每一层相关的判断逻辑可能都需要重新复制一遍。如果用递归,那么他的逻辑结构是很稳定的,如果仅仅是新增了一级,递归的逻辑是仍然有效的,代码无需变动。如果需要修改判断逻辑,基本上只要在递归的主逻辑上稍微修改一下就行,数据的封装和向下传递是基本不需要动的。 处理树状结构数据考验的就是递归的功力。递归主要搞清楚两点,第一点是进入下一次递归的条件