递归遍历树,生成树,搜索查找树节点

350 阅读1分钟

rebuildEntityTree = (value, arr) => {

    if (!arr) {
        return []
    }
    let newarr = [];
    arr.forEach(element => {
        if (element.text.indexOf(value) > -1) {
            const ab = this.rebuildEntityTree(value, element.children);
            const obj = {
                ...element,
                //children: ab
            }
            newarr.push(obj);
        } else {
            if (element.children && element.children.length > 0) {
                const ab = this.rebuildEntityTree(value, element.children);
                const obj = {
                    ...element,
                     children: ab
            };
                // newarr.push(obj);
                if (ab && ab.length > 0) {
                    newarr.push(obj);
                }
            }
        }
    });
    return newarr;
};
function showall(menu_list, parent,index) {
   index++
  for ( var i=0,len=menu_list.length;i<len;i++) {
           // 如果有子节点,则遍历该子节点
         if (menu_list[i].children.length > 0) {
                  // 创建一个子节点li
                var oli ='<a href="#">' +
                 '<i class="'+menu_list[i].attributes.icon+'"  ></i>' +
                 '<span class="nav-label" >'+menu_list[i].text+'</span>' +
                 '<span class="fa arrow"></span>' +
                 '</a>'
                    var li = $("<li class='child'></li>");
                    $(li).append($(oli))
                   // 将li的文本设置好,并马上添加一个空白的ul子节点,并且将这个li添加到父亲节点中
                    if(index==1){
                        $(li).append("<ul class='nav nav-second-level collapse'></ul>").appendTo(parent);
                       var classNm='nav nav-second-level collapse'
                    }else if(index==2){
                        $(li).append("<ul class='nav nav-third-level collapse'></ul>").appendTo(parent);
                        var classNm='nav nav-third-level collapse'
                    }else if(index==3){
                        $(li).append("<ul class='nav nav-fourth-level collapse'></ul>").appendTo(parent);
                        var classNm='nav nav-fourth-level collapse'
                    }

                   // 将空白的ul作为下一个递归遍历的父亲节点传入
                     showall(menu_list[i].children, $(li).children('ul'),index);
                }
           // 如果该节点没有子节点,则直接将该节点li以及文本创建好直接添加到父亲节点中
            else {
             var oli ='<a class="J_menuItem" href="'+menu_list[i].attributes.url+'">' +
                 '<i class=""  ></i>' +
                 '<span class="nav-label" >'+menu_list[i].text+'</span>' +
                 '</a>';
                 $("<li class='child'></li>").append(oli).appendTo(parent);
                }
         }
}