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 技术专栏】DOM 操作全攻略:从基础到进阶
【4月更文挑战第30天】本文深入讲解JavaScript与DOM交互,涵盖DOM基础、获取/修改元素、创建/删除元素、事件处理结合及性能优化。通过学习,开发者能掌握动态改变网页内容、结构和样式的技能,实现更丰富的交互体验。文中还讨论了DOM操作在实际案例、与其他前端技术结合的应用,助你提升前端开发能力。
|
2天前
|
JavaScript 前端开发 算法
JavaScript 中的 if 判断:深入理解、实战应用与进阶技巧
【4月更文挑战第7天】探索 JavaScript 中的 if 判断语句,它是构建逻辑清晰程序的基础。了解其概念、语法、应用示例及编程技巧,包括条件控制、else if 结构、三目运算符。注意条件表达式简洁性,避免 falsy 值陷阱,利用逻辑运算符优化,并减少 if 嵌套。实践这些技巧将提升编程能力和代码质量。
24 0
|
2天前
|
数据采集 Web App开发 JavaScript
JavaScript爬虫进阶攻略:从网页采集到数据可视化
JavaScript爬虫进阶攻略:从网页采集到数据可视化
|
2天前
|
JSON JavaScript 前端开发
js树形菜单 如何用递归制作一个简单的树形菜单
js树形菜单 如何用递归制作一个简单的树形菜单
43 0
|
2天前
|
JavaScript 前端开发
JavaScript进阶知识汇总~(一)
JavaScript进阶知识汇总~(一)
|
2天前
|
JSON JavaScript 数据格式
js递归树形菜单
js递归树形菜单
|
2天前
|
JavaScript
node.js递归拼凑成树形结构
node.js递归拼凑成树形结构
13 0
|
2天前
|
JavaScript 前端开发
JavaScript 中运算符优先级:理解规则、实战应用与进阶技巧
【4月更文挑战第6天】了解 JavaScript 运算符优先级是编写清晰无误代码的关键。优先级规则决定了运算的顺序,从高到低包括一元、乘性、加性、关系、相等性等运算符。掌握优先级能避免逻辑错误,例如在表达式 `a * b + c` 中,乘法先于加法执行。实际应用中,使用括号可以明确运算顺序,提高代码可读性。注意避免混淆优先级,如赋值与比较操作。利用优先级简化逻辑判断,遵循编码规范,提升编程技能。通过不断学习和实践,加深对运算符优先级的理解,优化代码质量。
18 0
|
2天前
|
存储 JSON JavaScript
JavaScript高级进阶(更新中)-javascript-gao-ji-jin-jie--geng-xin-zhong-(三)
JavaScript高级进阶(更新中)-javascript-gao-ji-jin-jie--geng-xin-zhong-
40 1
|
2天前
|
JavaScript 前端开发 算法
JavaScript高级进阶(更新中)-javascript-gao-ji-jin-jie--geng-xin-zhong-(二)
JavaScript高级进阶(更新中)-javascript-gao-ji-jin-jie--geng-xin-zhong-
29 0