网站制作需要什么网站建设中啥意思

张小明 2026/1/2 20:53:40
网站制作需要什么,网站建设中啥意思,WordPress支持api吗,南京网站网站建设列表转树结构#xff1a;从扁平列表到层级森林的魔法变身#x1f504; 一、题目详细描述#xff1a;扁平列表的 “树形梦想” 想象一下#xff0c;你手里有一串平平无奇的列表数据#xff0c;每个元素都带着id和parentId—— 就像一群知道自己 “爸爸是谁” 的小精灵。比如…列表转树结构从扁平列表到层级森林的魔法变身一、题目详细描述扁平列表的 “树形梦想”想象一下你手里有一串平平无奇的列表数据每个元素都带着id和parentId—— 就像一群知道自己 “爸爸是谁” 的小精灵。比如这样javascriptconst list [ { id: 1, parentId: 0, name: A }, // 老大没有爸爸parentId0 { id: 2, parentId: 1, name: B }, // 老二爸爸是1号 { id: 3, parentId: 1, name: C }, // 老三爸爸也是1号 { id: 4, parentId: 2, name: D } // 老四爸爸是2号 ];而你的任务是把它们变成一棵枝繁叶茂的 树让每个节点都带着自己的 “孩子”javascript[ { id: 1, parentId: 0, name: A, children: [ // A的孩子 { id: 2, parentId: 1, name: B, children: [ { id: 4, parentId: 2, name: D } ] // B的孩子 }, { id: 3, parentId: 1, name: C } // A的另一个孩子 ] } ]简单说就是让扁平的 “线性关系” 变成有层级的 “父子关系”这就是列表转树结构的核心任务二、面试官想考这些知识点1.树 数据结构的 “家族图谱”树是一种经典的层级结构有几个关键概念和这道题死死绑定根节点没有爸爸的节点parentId0是树的 “老祖宗”子节点被其他节点包含的节点比如上例中 B 是 A 的子节点层级关系通过parentId和id关联形成 “爷爷→爸爸→儿子” 的链条children 属性树结构的标志每个节点用它收纳自己的 “后代”。面试官就是想看看你对 “如何用代码表达层级关系” 的理解 —— 毕竟树结构在前端太常见了2.递归 树结构的 “天然搭档”一提到树递归简直是 “条件反射” 般的存在。递归的核心是 “自己调用自己”刚好匹配树的 “每个节点的子节点也是一棵树” 的特性递归公式要构建一个节点的子树只需找到所有parentId等于该节点id的元素再为这些元素递归构建它们的子树退出条件当某个节点没有子节点时找不到parentId等于它id的元素递归就可以 “刹车” 了。说白了递归就是让每个节点自己搞定 “找孩子” 的工作非常省心三、解法一递归法 —— 简单直接的 “笨办法”1.两层循环暴力但有效递归法的核心思路是 “先找根再找子子再找孙”。外层循环找当前层级的节点内层循环帮这些节点找 “孩子”找不到就收手。代码实现javascript// 列表转树的递归函数 // list原始扁平列表parentId当前要找的父节点ID默认0即根节点 function list2tree(list, parentId 0) { const result []; // 存储当前层级的节点 // 外层循环遍历所有节点找爸爸是parentId的节点 list.forEach(item { // 如果当前节点的parentId等于目标parentId说明它是当前层级的节点 if (item.parentId parentId) { // 递归调用帮这个节点找它的子节点子节点的parentId等于当前节点的id const children list2tree(list, item.id); // 如果有子节点就给当前节点加个children属性存起来 if (children.length) { item.children children; } // 把处理好的节点放进结果数组 result.push(item); } }); return result; // 返回当前层级的节点可能带children }2.ES6 语法优化代码瘦身术✨ES6 的filter和map简直是为这种场景量身定做的用它们可以把循环和判断 “浓缩” 成更优雅的代码。ES6 API 详解filter遍历数组返回满足条件的元素组成的新数组相当于 “筛选”map遍历数组对每个元素做处理后返回新数组相当于 “改造”。优化代码javascriptfunction list2tree2(list, parentId 0) { // 1. 先用filter筛选出当前parentId的直接子节点 return list.filter(item item.parentId parentId) // 2. 用map给每个子节点装孩子 .map(item ({ ...item, // 保留原始属性id、parentId、name等 children: list2tree2(list, item.id) // 递归找子节点挂到children上 })); }3.时间复杂度O (n²)—— 有点费时间的 “老实人”为什么是 O (n²)假设列表有 n 个节点每个节点都要遍历一次列表找子节点最坏情况下每个节点都要找 n 次所以总操作次数是 n×n即 O (n²)。能不能优化当然能这种方法虽然简单但数据量大的时候会很慢比如有 10000 个节点就要做 1 亿次操作。这时候就得请出 “空间换时间” 的思路啦四、解法二空间换时间 —— 用 HashMap 加速⚡1.用对象字面量代替 HashMap给节点办 “身份证”思路是先给每个节点 “拍个照” 存起来存在对象里需要找父节点时直接 “刷身份证” 调取不用再遍历整个列表。代码实现javascriptfunction listToTree(list) { const map {}; // 用对象当通讯录key是节点idvalue是带children的节点 const result []; // 最终的树结构 // 第一步给每个节点办身份证并初始化children list.forEach(item { map[item.id] { ...item, // 复制原始属性 children: [] // 先给每个节点空的children数组 }; }); // 第二步给每个节点找爸爸挂到正确的位置 list.forEach(item { const node map[item.id]; // 从通讯录里取出当前节点 if (item.parentId 0) { // 如果是根节点直接放进结果数组 result.push(node); } else { // 不是根节点查通讯录找到爸爸把自己放进爸爸的children里 // 可选链?.避免爸爸不存在的情况防止报错 map[item.parentId]?.children.push(node); } }); return result; }2.ES6 的 Map 结构更专业的 “通讯录”ES6 的Map是专门做键值对存储的比普通对象更灵活键可以是任意类型用它来实现更规范。代码实现javascriptfunction list2treeWithMap(list) { const nodeMap new Map(); // 用Map当通讯录 const tree []; // 最终的树 // 第一步给每个节点办身份证存在Map里 list.forEach(item { nodeMap.set(item.id, { // 用id当key ...item, children: [] // 初始化children }); }); // 第二步认亲挂到爸爸名下 list.forEach(item { const node nodeMap.get(item.id); // 从Map里取节点 if (item.parentId 0) { tree.push(node); // 根节点进结果 } else { // 找爸爸把自己加进children nodeMap.get(item.parentId)?.children.push(node); } }); return tree; }3.时间复杂度O (n)—— 飞一般的速度为什么这么快因为只遍历了两次列表第一次存节点O (n)第二次挂节点O (n)每次操作存、取、加 children都是 O (1)。总操作次数是 2n忽略常数后就是 O (n)。大数据量下这可比递归法快太多了五、面试官会问什么 1.实际开发中哪里会用到列表转树太多啦比如省市区三级联动数据库里省、市、区存在一张表用parentId关联、后台管理系统的树状菜单菜单父子层级、评论区的嵌套回复评论和子评论等。id parentId name 1 0 北京 2 1 东城区 3 1 朝阳区 ... 12 0 江西 32 12 赣州 ...2.为什么列表要扁平化存储而不是直接存成树扁平化列表带parentId在数据库中存储更方便查询、增删节点时不用处理复杂的嵌套结构需要展示层级关系时再转成树结构就行“存的时候 flat 用的时候 tree”。3.递归法和 HashMap 法各有什么优缺点递归法代码简洁、容易理解但数据量大时效率低O (n²)HashMap 法效率高O (n)但需要额外空间存 map空间复杂度 O (n)。实际开发中数据量大选 HashMap数据量小递归更直观。六、结语选对方法事半功倍列表转树结构看似简单却藏着数据结构树、算法思想递归、空间换时间和 JS API 的综合考察。递归法像 “笨鸟先飞”简单易懂但效率一般HashMap 法则像 “聪明的懒汉”用空间换时间适合大数据场景。下次面试官再问这个问题你可以先笑着说“这题我会两种解法” 然后从递归讲到 Map 优化再结合实际场景分析保证让面试官眼前一亮
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

建站购物网站wordpress企业模板下载地址

Axure RP界面本地化技术解决方案:从英文障碍到中文流畅体验 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包,不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn …

张小明 2026/1/1 2:06:34 网站建设

制作企业网站的如何推广自己网站的关键词

Windows平台5分钟快速搭建RTMP流媒体服务器:Nginx-RTMP完整实战指南 【免费下载链接】nginx-rtmp-win32 Nginx-rtmp-module Windows builds. 项目地址: https://gitcode.com/gh_mirrors/ng/nginx-rtmp-win32 想要在Windows系统上快速构建专业的流媒体直播服…

张小明 2026/1/1 5:32:48 网站建设

寿县有做网站开发的吗建设教育局网站硬件价格需要多少钱

小物件中的大战略 在日常生活中,我们往往忽视了那些看似微不足道的日常用品背后所蕴含的国家科技战略与技术伦理的深刻变革。水银体温计的逐步淘汰,正是这样一个典型缩影。它不仅代表着一种传统测量工具的退出,更是中国在生态文明建设、科技自…

张小明 2026/1/1 2:08:18 网站建设

某个网站seo分析实例网站发外链的好处

在金融市场的神殿里,尤金・法马的名字始终与一场颠覆性的认知革命紧密相连。他用严谨的实证研究撕碎了 "股市可以被精准预测" 的幻想,提出的 "有效市场假说"(EMH)像一把锋利的手术刀,剖开了市场价…

张小明 2026/1/1 3:31:11 网站建设

手机网站建设咨询电话做营销的有那么网站

PRD / ADR / Spec / MVP 全面中文教程 本文是一份结构清晰、可直接复制使用的完整教程,涵盖 PRD、ADR、Spec、MVP 的全称、核心理念、相互关系、使用场景、模板、最佳实践以及真实案例与代码示例。内容模块化,便于快速查阅与落地。一、名词与全称&#x…

张小明 2025/12/31 1:52:26 网站建设

做面料要建议网站微网站和小程序的区别

ARP扫描工具arp-scan:快速发现局域网设备完整指南 【免费下载链接】arp-scan The ARP Scanner 项目地址: https://gitcode.com/gh_mirrors/ar/arp-scan ARP扫描工具arp-scan是一款专为网络管理员和安全工程师设计的强大局域网设备发现工具。通过利用ARP协议的…

张小明 2026/1/1 23:08:56 网站建设