程序设计与算法-----迭代算法

迭代算法:

如下, 给出一个数据结构:oldData,使它变成一个 节点层级结构, 满足条件:所有子节点的属性pid是其父节点的id, 于是可以这样设计:

 

  let oldData = [
            {id: 1, pid: 0, labelName: "test222"},
            {id: 3, pid: 1, labelName: "小明7"},
            {id: 5, pid: 1, labelName: "小明4"},
            {id: 6, pid: 3, labelName: "小明3"},
            {id: 7, pid: 1, labelName: "小明22"},
            {id: 60, pid: 0, labelName: "DFss"},
            {id: 12, pid: 0, labelName: "hhhlo"}

        ]
        //首次遍历出pid为0,也就是根节点的所有节点,这是第一列父节点;
        let initialData = oldData.filter((item)=>{
            if(item.pid === 0){
                return item;
            }
        })
        //开始迭代,迭代函数recur接受一个子节点列表做为参数;
        function recur(childrens){
           //创建一个临时空数组,表示符合条件的子节点集合
           let _childrens = [];
            //遍历迭代参数中childrens的个数
            for(let i=0;i<childrens.length;i++){
                for(let k=0;k<oldData.length;k++){
                    //遍历原数据oldData所有个数, 开始匹配条件,若oldData中满足其子节点pid是父节点childrens中id,则临时空数组_childrens需要push相应的属性:value,pid,id

                    if(childrens[i].id === oldData[k].pid){
                        _childrens.push({
                            value:oldData[k].labelName,
                            pid:oldData[k].pid,
                            id:oldData[k].id

                        })
                        //将childrens里添加children属性,并存入子节点集合_childrens,用来标记包含子节点.
                        childrens[i].children= _childrens;
                    }
                }
                //开始循环迭代,执行条件是_childrens临时集合不能为空,如果为空则停止迭代,否则继续迭代,寻找各个条件关系

                _childrens.length>0 && recur(_childrens)
          
            }
          

        }
        recur(initialData);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值