js---树形菜单递归生成列表

  记录树形菜单递归生成列表:

<script type="text/javascript">
var obj = [
  {title:'标题1',children:[{title:'标题1-1',children:[{title:'标题1-2',children:[{title:'标题1-3'}]}]}]},
  {title:'标题2',children:[{title:'标题2-1',children:[{title:'标题2-2',children:[{title:'标题2-3'}]}]}]},
  {title:'标题3',children:[{title:'标题3-1',children:[{title:'标题3-2',children:[{title:'标题3-3'}]}]}]},
];
var item,level=0,str = '|',tree = [];
getTree(obj,level);
function getTree(obj,level){
  level++;
  if(level > 1){
    for(let i=2; i<=level; ++i){
      str += '';
    }
  }
  for(let i in obj){
    item = obj[i];
    tree.push((level > 1) ? (str+item['title']) : item['title']);
    if(item['children'] && item['children'].length){
      getTree(item['children'],level);
    }
  }
 level = 0;
 str = '|';
} console.log(tree); </script>

结果示例:

以上方法存在BUG:当一级分类存在多个二级分类就有问题:

例如:

var obj = [
  {title:'标题1',children:[
      {title:'标题1-1',children:[{title:'标题1-2',children:[{title:'标题1-3'}]}]},
      {title:'标题1-1',children:[{title:'标题1-2',children:[{title:'标题1-3'}]}]},
      {title:'标题1-1',children:[{title:'标题1-2',children:[{title:'标题1-3'}]}]},
  ]},
  {title:'标题2',children:[{title:'标题2-1',children:[{title:'标题2-2',children:[{title:'标题2-3'}]}]}]},
  {title:'标题3',children:[{title:'标题3-1',children:[{title:'标题3-2',children:[{title:'标题3-3'}]}]}]},
];

这两个就是有问题的:

代码优化

(function(){
    var item,level=0,str = '|',tree = [];
    getTree(obj,level);

    function getTree(obj,level){
        level++;
        for(var i in obj){
          item = obj[i];
          str = getStr(level);
          // tree.push((level > 1) ? (str+item['title']) : item['title']);
          console.log((level > 1) ? (str+item['title']) : item['title']);
          if(item['children'] && item['children'].length){
            getTree(item['children'],level);
          }
        }
    }
    function getStr(level){
      str = '|';
      if(level == 1){ return ''; }
      if(level > 1){
         for(var i=2; i<=level; ++i){ str += ''; }
      }
      return str;
    }
     console.log(tree);
})();

效果如下:

就正常了。

posted @ 2021-12-28 11:13  帅到要去报警  阅读(464)  评论(0编辑  收藏  举报