项目中遇到的倒序问题及代码
刚刚做项目遇到了一些值得注意的点,很奇葩,但又确实如此
项目基础还是 element-ui
描述: tree结构的删除操作,后台希望得到所有要删除节点的ID,并且因后台关联表过多,要逐个删除,希望前台按先节点后目录的结构传值过来(你要是强势,就别理他,直接传个目录节点ID过去,让他自己查就完了---- 咱好脾气,不跟他们一般计较(BB不过他们)),这块想了一下,既然要逐个删除,那就按层级倒序传过去得了
举个栗子:比方数据结构如下,数据ABCDEF对应的ID为123456,名称为ABCDEF
代码结构如下
1 const data = 2 { 3 id: 1, 4 name: 'A', 5 children: [ 6 { 7 id: 2, 8 name: 'B', 9 children: [ 10 { 11 id: 4, 12 name: 'D', 13 children: [] 14 }, 15 { 16 id: 5, 17 name: 'E', 18 children: [] 19 } 20 ] 21 }, 22 { 23 id: 3, 24 name: 'C', 25 children: [ 26 { 27 id: 6, 28 name: 'F', 29 children: [] 30 } 31 ] 32 } 33 ] 34 }
稍微想了一下,也没想到先拿DEF有啥好方法,就想着,拿正常遍历结构(ABDECF)进行倒序排序,结果也能达成目的,符合要求,那就很好解决
解决思路:遍历数据,然后倒序一下就行
按设想思路进行:代码如下(此种方法属于‘深度优先遍历‘或'前序遍历' ----专业名词)
1 const arr = [] 2 getIdList(data, arr) 3 function getIdList(data, list) { 4 list.push(data.id) 5 if (data.children && data.children.length > 0) { 6 data.children.map(item => { 7 getIdList(item, list) 8 }) 9 } 10 } 11 console.log(arr.reverse()) // 倒序排列,输出 [6,3,5,4,2,1]
但我们经理提了种方法:将list.push放到上面代码第9行的后面,代码就变成了如下样式:(妥妥的‘后序遍历’ ---- 专业名词)
const arr = [] getIdList(data, arr) function getIdList(data, list) { if (data.children && data.children.length > 0) { data.children.map(item => { getIdList(item, list) }) } list.push(data.id) }
console.log(arr) // 注意:此时我没有进行reverse倒序操作,输出 [4, 5, 2, 6, 3, 1],直接符合要求
总结:拿到上述问题后,第一想法就是正常遍历,然后倒序排序,像我们经理说的那种方法,个人想不到,但分析一下也能分析出来,这只能说明自己还是太过年轻,有更好的上述问题解决方案可以交流一下。