美文网首页
你不知道的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递归技巧

    递归找对应的节点 要求如下输入一个id, 找出对应的id所对应的结构 递归找到没有children的所有子节点name

  • 递归的解析

    解释:程序调用自身的编程技巧叫做递归。 程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在...

  • 树形结构递归/原生js实现/vue递归组件

    原生js实现递归渲染 Vue2.0递归组件

  • 你不知道的js技巧

    Object.defineProperty(obj,"size",{}) 对某个对象的属性进行额外扩展设置需要三个...

  • js 总结六 7-18

    递归 递归技巧 假设递归函数已经写好 寻找递推关系 将递推关系的结构转换为递归体 将临界条件加入到递归体中递归思想...

  • Rust语言编程实例100题-028

    Rust语言编程实例100题-028 题目:递归练习。程序调用自身的编程技巧称为递归( recursion)。递归...

  • Rust语言编程实例100题-026

    Rust语言编程实例100题-026 题目:递归练习。程序调用自身的编程技巧称为递归( recursion)。递归...

  • Rust语言编程实例100题-027

    Rust语言编程实例100题-027 题目:递归练习。程序调用自身的编程技巧称为递归( recursion)。递归...

  • 递归、迭代与递推三者的差别

    递归,递推,迭代的区别_csdn链接 递归: 程序调用自身的编程技巧称为递归,是函数自己调用自己。 使用递归要注意...

  • JS开发必须知道的41个技巧

    JS是前端的核心,但有些使用技巧你还不一定知道;本文梳理了JS的41个技巧,帮助大家提高JS的使用技巧 目录Arr...

网友评论

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

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