做一个无限节点的树结构插件的原理

发布于 2022-09-04 10:21:42 字数 1205 浏览 16 评论 0

因为公司功能扩展需要,所以我想做一个无限树结构的插件来进行更新。
但是目前遇见了这样的一个问题,假如数据如下:
    {
        name: '水果', id: 1, children: [
            {name:'水果1',id:2,children:[
                {name:'水果2',id:3,children:[
                    {name:'水果2',id:3,children:[]}        
                ]}
            ]}
        ]
    }

像这种无限扩展的子级,我每一层的每一个数据我都需要添加一个status对象。每一个层级都需要添加一个内层循环。但是我感觉这种办法太死了。请问有什么便捷的技巧或者写法呢?
于是我想到了能否用for来for,但是尝试了一下发现不行。
我又想到能否用递归实现呢?但是小弟对递归的作用还不算太明白所以没有实现。
想问下,像我这种问题有什么办法可以实现用最少的代码做到每个数据里面都能给他一个status呢?

app.directive('tree',function(){
    return {
        restrict:'E',
        replace:true,
        scope:{
            list:"=",
            resData:"=",
            layer:"@"
        },
        templateUrl:"template/tree.html",
        link:function(scope,elem,attr){
            console.log(scope.list)
            for(var i in scope.list){
                scope.list[i].status=false;
                if(scope.list.children){
                    for(var k in scope.lists[i].children){
                        scope.list[i].children[k].status=false;
                    }
                }
            }
        }
    }
})

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

嘿哥们儿 2022-09-11 10:21:42
  var data = [{name: '水果', id: 1, children: [
            {name:'水果1',id:2,children:[
                {name:'水果2',id:3,children:[
                    {name:'水果2',id:3,children:[]}        
                ]}
            ]}
        ]
    }];
    
 function render(data){
         
    data.forEach(function(item,index){
        item.status = false;
        if(item.children){
            render(item.children);
        }
    }); 
    console.log(JSON.stringify(data));
    return data;
 }
 
 render(data);
无名指的心愿 2022-09-11 10:21:42
function set(obj){ 
  if(!!!obj.status) obj.status = "1"; 
  if(obj.children.length > 0)
     $.each(obj.children, function(i,o){set(o)});
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文