JavaScript 进阶第十章(递归)

简介: JavaScript 进阶第十章(递归)

概念


一种函数,自己调用自己,就是递归


语法特点


  1. 嵌套的层级是未知 或者 是很多层的
  2. 递归中比出现 if 结构


需求


根据数据,生成类似页面结构  

20210903211501813.png


数据


[
  {
    "name": "广东",
    "children": [
      {
        "name": "广州",
        "children": [
          {
            "name": "白云"
          },
          {
            "name": "海珠",
            "children": [
              {
                "name": "南石头街道"
              }
            ]
          }
        ]
      },
      {
        "name": "深圳",
        "children": [
          {
            "name": "南山"
          }
        ]
      }
    ]
  }
]


不使用递归


  const list = [{ name: "广东", children: [{ name: "广州", children: [{ name: "白云" }, { name: "海珠", children: [{ name: "南石头街道" }] }] }, { name: "深圳", children: [{ name: "南山" }] }] }];
  let section = document.querySelect('section');
    let section = document.querySelector('section');
        list.forEach((v1) => {
            section.innerHTML += `<div>${v1.name}</div>`;
            if (v1.children) {
                v1.children.forEach((v2) => {
                    section.innerHTML += `<div>${v2.name}</div>`;
                    if (v2.children) {
                        v2.children.forEach(v3 => {
                            section.innerHTML += `<div>${v3.name}</div>`;
                            if (v3.children) {
                                v3.children.forEach(v4 => {
                                    section.innerHTML += `<div>${v4.name}</div>`;
                                })
                            }
                        })
                    }
                })
            }
        })


使用递归

   <script>
        // 递归实现步骤
        // 1. 定义函数:传入参数
        let body = document.body
        function showChis(date, lever = 0) {
            // console.log(date);
            // 2. 不考虑递归:解决一层问题:遍历数组,数组第一层对象中的name取出来实现效果
            let str = '---'
            date.forEach((item) => {
                // console.log(item);
                // 第一个就出来了然后在判定
                body.innerHTML += `<div>${str.repeat(lever)} ${item.name}</div>`;
                // console.log(item.children);
                if (item.children) {
                    // 3. 测试
                    // 4. 寻找递归点:只要item对象有children属性,与data本身的性质一样
                    showChis(item.children, lever + 1);
                    // 5. 递归出口:隐式递归出口(函数自然运行结束)
                }
                // 显示出口:判定,判定后return
            })
        }
        let z = new showChis(date);
    </script>


相关文章
|
2月前
|
前端开发 JavaScript
JavaScript递归菜单栏
JavaScript递归菜单栏
JavaScript递归菜单栏
|
3月前
|
JSON JavaScript 前端开发
JavaScript第五天(函数,this,严格模式,高阶函数,闭包,递归,正则,ES6)高级
JavaScript第五天(函数,this,严格模式,高阶函数,闭包,递归,正则,ES6)高级
|
4月前
|
缓存 JavaScript 前端开发
|
5月前
|
XML 前端开发 JavaScript
JavaScript进阶 - AJAX请求与Fetch API
【7月更文挑战第3天】前端开发中的异步基石:AJAX与Fetch。AJAX,使用XMLHttpRequest,处理跨域、回调地狱和错误处理。Fetch,基于Promise,简化请求,但需注意默认无跨域头和HTTP错误处理。两者各有优劣,理解其问题与解决策略,能提升前端应用的性能和用户体验。
171 24
|
5月前
|
前端开发 JavaScript 安全
JavaScript进阶-JavaScript库与框架简介
【7月更文挑战第11天】JavaScript库和框架加速Web开发,但也带来挑战。选择适合项目、团队技能的库或框架,如React、Angular、Vue,是关键。保持依赖更新,注意性能优化,避免过度依赖。遵循最佳实践,确保安全性,如防XSS和CSRF。学习基础,结合代码示例(如React计数器组件),提升开发效率和应用质量。
71 1
|
5月前
|
缓存 JavaScript 前端开发
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第4天】JavaScript的Web Workers和Service Worker增强了Web性能。Web Workers处理后台多线程,减轻主线程负担,但通信有开销,受同源策略限制。Service Worker则用于离线缓存和推送通知,需管理其生命周期、更新策略,并确保安全。两者都带来了挑战,但也极大提升了用户体验。通过理解和优化,开发者能构建更高效、安全的Web应用。
146 2
|
5月前
|
资源调度 JavaScript 前端开发
JavaScript进阶 - JavaScript库与框架简介
【7月更文挑战第5天】JavaScript库和框架构成了前端开发的核心,如jQuery简化DOM操作,Angular、React和Vue提供全面解决方案。选择时要明确需求,避免过度工程化和陡峭学习曲线。使用版本管理工具确保兼容性,持续学习以适应技术变化。示例展示了jQuery和React的简单应用。正确选择和使用这些工具,能提升开发效率并创造优秀Web应用。
56 2
|
5月前
|
数据采集 缓存 JavaScript
JavaScript递归函数的设计与优化
JavaScript递归函数的设计与优化
|
5月前
|
设计模式 前端开发 JavaScript
JavaScript进阶 - JavaScript设计模式
【7月更文挑战第1天】JavaScript设计模式增进代码复用和维护性。单例模式确保唯一实例,用闭包防止命名冲突和控制状态访问。观察者模式实现一对多依赖,通过解绑避免内存泄漏。工厂模式封装对象创建,适度使用避免复杂度。装饰者模式动态添加行为,保持简洁以保可读性。理解模式的优缺点,灵活应用,提升代码质量。
132 3
|
5月前
|
存储 前端开发 安全
JavaScript进阶 - 浏览器存储:localStorage, sessionStorage, cookies
【7月更文挑战第2天】探索Web存储:localStorage持久化,sessionStorage会话限定,cookies则伴随HTTP请求。了解它们的特性和限制,如localStorage的5MB容量限制、跨域问题,sessionStorage的生命周期,及cookies的安全与带宽消耗。使用时需权衡安全、效率与应用场景。示例代码展示存储与检索方法。
363 2