JavaScript数组递归:构建ElementUI级联选择器的树形数据
1.1 前端处理
通常,我们前端在开发管理后台的时候,会选择 vue+element
这样的技术栈去实现。但我们后端给的数据格式通常并不符合 element
的参数数据要求。比如,级联选择器 cascader
的参数数据格式如下:
1 | [{ |
而我们后端在输出接口的时候,是极少采用这种数据格式的。比如,一般叫 id|name|child 这样的字段名。
我们知道,cascader 是支持这样的别名参数设计的,因此我们使用时也没什么问题。
但是我今天遇到的一个状况是,后端直接给出了一个一维数组,换句话说,这位兄弟是直接查了一下数据表,把所有的数据通过一个数组直接给我返回了。而至于我怎么使用这个数据,他就不考虑了,因为他还有其他业务需要开发。
后端返回的数据格式如下:
1 | [{ |
嗯,理解。不就是个简单的递归嘛!我一会儿就写好了。但我担心后面其他地方还有这样类似的接口输出,那我总是写递归不就很麻烦了吗?因此,将此方法抽离,并加了一些扩展,最终方法代码如下:
1 | export const makeElementTree = (params) => { |
在业务代码中,我们首先引入我们的方法,然后传进去参数就可以啦,如下演示:
1 | const treeCats = makeElementTree({ |
1.2 后端数据处理
如果是后端直接处理后返回,则递归如下:
1 | def makeTree(pid, arr): |
最后,在编程中,慎用递归!!!