美文网首页
你不知道的js递归技巧

你不知道的js递归技巧

作者: 李贵功 | 来源:发表于2019-06-03 22:54 被阅读0次

    递归找对应的节点

    要求如下输入一个id, 找出对应的id所对应的结构

    var arr =[
        {id: 1,children: []},
        {id: 2,children: []},
        {id: 3,children: []},
        {id: 4,children: []},
        {id: 5,children: []},
        {
          id: 6,
          children: [
            {
              id: 7,
              children: [{id: 9, children:[]}]
            },{
              id: 8,
              children: []
            }
          ]
        },
      ];
      
      
      方法如下: 
      function digui(arr, id) {
        for(let i = 0; i< arr.length; i++) {
          if(arr[i].id === id){
            return arr[i]
          } else {
            if(arr[i].children.length !== 0){
              return digui(arr[i].children, id)
            }
          }
        }
      }
      
    console.log(digui(arr, 9));   //{id: 9, children:[]}
    console.log(digui(arr, 6));   
    // 结果:  
    //    {
    //      id: 6,
    //      children: [
    //        {
    //          id: 7,
    //          children: [{id: 9, children:[]}]
    //        },{
    //          id: 8,
    //          children: []
    //        }
    //      ]
    //    }
    

    递归找到没有children的所有子节点name

    var data = [
        {
          name: "所有物品",
          children: [
            {
              name: "水果",
              children: [{name: "苹果", children: [{name: '青苹果',children: [{name: '北方米饭'}, {name: '南方米饭'}]}, {name: '红苹果'}]}]
            },
            {
              name: '主食',
              children: [
                {name: "米饭"}
              ]
            },
            {
              name: '生活用品',
              children: [
                {name: "电脑类", children: [{name: '联想电脑'}, {name: '苹果电脑'}]},
                {name: "工具类", children: [{name: "锄头"}, {name: "锤子"}]},
                {name: "生活用品", children: [{name: "洗发水"}, {name: "沐浴露"}]}
              ]
            }
          ]
        }]
        
        function didui(arr) {
          let arrList = ''
          function f(arr) {
            arr.forEach(item => {
              if(item.children) {
                arguments.callee(item.children)
              } else {
                arrList += item.name + ';';
              }
            })
          }
          f(arr)
          return arrList;
        }
    
      console.log(didui(data));  //北方米饭;南方米饭;红苹果;米饭;联想电脑;苹果电脑;锄头;锤子;洗发水;沐浴露;
    
    

    相关文章

      网友评论

          本文标题:你不知道的js递归技巧

          本文链接:https://www.haomeiwen.com/subject/drqkxctx.html