项目中遇到的倒序问题及代码

 刚刚做项目遇到了一些值得注意的点,很奇葩,但又确实如此

项目基础还是 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],直接符合要求

 

 总结:拿到上述问题后,第一想法就是正常遍历,然后倒序排序,像我们经理说的那种方法,个人想不到,但分析一下也能分析出来,这只能说明自己还是太过年轻,有更好的上述问题解决方案可以交流一下。

posted @ 2021-05-27 16:50  程序员笔记--vue  阅读(118)  评论(0编辑  收藏  举报