怎么实现对数据中的后代进行筛选

数据里面是n个对象 每个对象具备自己的id和所属id 从而形成多级的父子孙……关系 现在要根据一身的id和所属的id过滤出该对象的所有后代

阅读 2.8k
3 个回答

可以去看看多叉树吧,情况有点像

1.先过滤 parentId = id 的所有节点, 并将节点的id存到一个列表里 list1
2.再过滤 parentId in list1 的所有节点, 并将节点的id存到列表里 list2
3.再过滤 parentId in list2 的所有节点, 并将节点的id存到列表里 list3
4...
5...
...

执行到哪一步的到的列表为空了,结束判断
把list1, list2, list3 ... listN 合并起来,就是所有的后代

定义一个方法 首先用for循环找到第一个子代push进入预先定义好的数组 并获得该子代的id再次调用该方法

点击页面的按钮调用方法输出筛选后的数组

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<button onclick="shuchu('东-河北')">sasfYJ;/SDFZGHJKL;YTEASDFGHJ</button>
<script>
    var shuju=[
        {id:'远东机构', suoshu:'远东集团'},
        {id:'远东', suoshu:'远东机构'},
        {id:'东-河北', suoshu:'远东'},
        {id:'东-河北-承德', suoshu:'东-河北'},
        {id:'东-河北-承德-x', suoshu:'东-河北-承德'},
        {id:'东-河北-承德-y', suoshu:'东-河北-承德'},
        {id:'东-河北-保定', suoshu:'东-河北'},
        {id:'东-河北-保定-x', suoshu:'东-河北-保定'},
        {id:'东-河北-保定-y', suoshu:'东-河北-保定'},
        {id:'东-河南', suoshu:'远东'},
        {id:'东-河南-承德', suoshu:'东-河南'},
        {id:'东-河南-承德-x', suoshu:'东-河南-承德'},
        {id:'东-河南-承德-y', suoshu:'东-河南-承德'},
        {id:'东-河南-保定', suoshu:'东-河南'},
        {id:'东-河南-保定-x', suoshu:'东-河南-保定'},
        {id:'东-河南-保定-y', suoshu:'东-河南-保定'},
        {id:'远西', suoshu:'远东机构'},
        {id:'西-河北', suoshu:'远西'},
        {id:'西-河北-承德', suoshu:'西-河北'},
        {id:'西-河北-承德-x', suoshu:'西-河北-承德'},
        {id:'西-河北-承德-y', suoshu:'西-河北-承德'},
        {id:'西-河北-保定', suoshu:'西-河北'},
        {id:'西-河北-保定-x', suoshu:'西-河北-保定'},
        {id:'西-河北-保定-y', suoshu:'西-河北-保定'},
        {id:'西-河南', suoshu:'远西'},
        {id:'西-河南-承德', suoshu:'西-河南'},
        {id:'西-河南-承德-x', suoshu:'西-河南-承德'},
        {id:'西-河南-承德-y', suoshu:'西-河南-承德'},
        {id:'西-河南-保定', suoshu:'西-河南'},
        {id:'西-河南-保定-x', suoshu:'西-河南-保定'},
        {id:'西-河南-保定-y', suoshu:'西-河南-保定'}
    ];
    var shaixuanj=[];
    function shaixuan(suoshu){

        for(var i=0;i<shuju.length;i++){
           // console.log(shuju.suoshu,suoshu);
            if(shuju[i].suoshu==suoshu){

                shaixuanj.push(shuju[i]);
                shaixuan(shuju[i].id);
            }
        }
       for(var j=0;j<shaixuanj.length;j++){
           console.log(shaixuanj[j].id);

       }
        console.log('结束');
    }
    function tianjia(num){
        shaixuanj.push(num);
        shaixuan(num.id);
        console.log(1);
    }
    function shuchu(num){
        console.log(shaixuan(num));
        //console.log(shaixuanj);
    }

</script>
</body>
</html>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题