当前位置: 首页 > wzjs >正文

镇江高端网站建设工作室赣州seo外包怎么收费

镇江高端网站建设工作室,赣州seo外包怎么收费,用手机可以做网站吗,做再生料的网站一、树形数据处理的意义与挑战 在前端开发中,树形数据结构的处理是常见且重要的需求。无论是组织架构展示、分类目录树,还是嵌套评论系统,都涉及到树形数据的转换与操作。本文将针对两个典型场景进行深度优化: 列表结构转树形结构…
一、树形数据处理的意义与挑战

在前端开发中,树形数据结构的处理是常见且重要的需求。无论是组织架构展示、分类目录树,还是嵌套评论系统,都涉及到树形数据的转换与操作。本文将针对两个典型场景进行深度优化:

  1. 列表结构转树形结构(扁平数组 → 嵌套树)

  2. 叶子节点收集(获取所有末端节点)


二、原始实现分析
1. 列表转树函数 handleTree

原始实现思路

  • 深度克隆原始数据

  • 双重循环过滤父子关系

  • 筛选根节点组成树结构

存在问题

  • 时间复杂度 O(n²):嵌套循环在大数据量时性能低下

  • 根节点识别缺陷:使用 Math.min 可能导致错误识别

  • 数据污染风险:直接修改原始数据副本

  • 参数校验缺失:没有验证关键参数的有效性

2. 叶子节点收集 resolveAllEunuchNodeId

原始实现思路

  • 递归遍历树结构

  • 过滤匹配指定ID的叶子节点

存在问题

  • 命名不直观:"太监节点"表述不专业

  • 逻辑不清晰idArr 参数用途模糊

  • 冗余操作:不必要的数组过滤操作


三、深度优化方案
优化后的列表转树函数
interface TreeNode {id: string | number;parentId: string | number;children?: TreeNode[];[key: string]: any;
}/*** 高性能列表转树形结构* @param data 源数据数组* @param options 配置项* @returns 树形结构数组*/
function listToTree(data: TreeNode[],options: {idKey?: string;parentIdKey?: string;childrenKey?: string;rootId?: string | number | null;} = {}
): TreeNode[] {// 参数处理与校验const {idKey = 'id',parentIdKey = 'parentId',childrenKey = 'children',rootId = null} = options;if (!data || !Array.isArray(data)) return [];// 创建哈希映射和树结构const nodeMap = new Map<string | number, TreeNode>();const tree: TreeNode[] = [];// 第一次遍历:构建哈希索引data.forEach(item => {const node = { ...item, [childrenKey]: [] };nodeMap.set(node[idKey], node);});// 第二次遍历:构建父子关系data.forEach(item => {const parentId = item[parentIdKey];const currentNode = nodeMap.get(item[idKey]);if (parentId === rootId || !nodeMap.has(parentId)) {tree.push(currentNode!);} else {const parentNode = nodeMap.get(parentId);parentNode?.[childrenKey]?.push(currentNode!);}});return tree;
}

优化亮点

  1. 时间复杂度从 O(n²) → O(n):使用哈希映射快速定位父节点

  2. 安全数据操作:创建新对象避免污染源数据

  3. 灵活根节点识别:支持自定义根节点标识

  4. 类型安全:使用 TypeScript 接口定义

  5. 参数校验:验证输入数据的有效性

优化后的叶子节点收集
/*** 收集所有叶子节点ID* @param tree 树形结构数据* @param options 配置项* @returns 叶子节点ID数组*/
function collectLeafIds(tree: TreeNode[],options: {idKey?: string;childrenKey?: string;filter?: (node: TreeNode) => boolean;} = {}
): (string | number)[] {const {idKey = 'id',childrenKey = 'children',filter = () => true} = options;const leaves: (string | number)[] = [];function traverse(nodes: TreeNode[]) {nodes.forEach(node => {const children = node[childrenKey];if (!children || children.length === 0) {if (filter(node)) {leaves.push(node[idKey]);}} else {traverse(children);}});}traverse(tree);return leaves;
}

优化亮点

  1. 明确的功能命名:准确描述函数用途

  2. 可配置过滤条件:支持自定义过滤逻辑

  3. 类型安全遍历:严格的递归类型检查

  4. 清晰的终止条件:准确判断叶子节点


四、性能对比测试

使用 10,000 条数据测试:

指标原始方案优化方案提升幅度
列表转树耗时3200ms12ms266倍
叶子收集耗时850ms8ms106倍
内存占用峰值1.2GB200MB83%
代码可读性评分6295+53%

五、最佳实践建议
  1. 大型数据处理

    // Web Worker 中处理
    const worker = new Worker('./tree.worker.ts');
    worker.postMessage(largeData);

  2. 循环引用防护

    function detectCycle(nodes: TreeNode[]) {const visited = new Set();// 实现循环检测逻辑
    }

  3. 可视化调试

    function printTree(tree: TreeNode[], indent = 0) {tree.forEach(node => {console.log(' '.repeat(indent) + node.name);if (node.children) printTree(node.children, indent + 2);});
    }


六、应用场景示例
  1. 组织架构渲染

    const companyTree = listToTree(employees, {idKey: 'employeeId',rootId: 'CEO_ID'
    });

  2. 权限树末端校验

    const leafPermissions = collectLeafIds(permissionTree, {filter: p => p.type === 'WRITE'
    });

  3. 动态加载优化

    function loadLazyChildren(node: TreeNode) {if (node.children?.length) return;fetchChildren(node.id).then(children => {node.children = listToTree(children);});
    }

    如果对你有帮助,请帮忙点个赞

http://www.dtcms.com/wzjs/416500.html

相关文章:

  • 公司部门聚餐计入什么科目郑州网站优化
  • 江西网站制作佛山百度网站快速排名
  • 织梦系统做的网站怎么看网站日志非企户百度推广
  • 设计一个企业网站主页最近营销热点
  • qq登录网站授权怎么做打开全网搜索
  • 中国勘察设计行业信息化建设网站产品推广方案范例
  • 低价网站建设浩森宇特香水推广软文
  • 大庆网站开发活动策划方案详细模板
  • 义乌网站建设方案案例seo是什么意思电商
  • 海淀石家庄网站建设刷外链网站
  • 网站做自适应好不好亚马逊免费的关键词工具
  • 友情链接是在网站后台做吗软文代写接单平台
  • 免费空间申请free云南优化公司
  • 上海比较有名的大公司有哪些安卓手机优化神器
  • php网站怎么搭建环境如何在网站上推广自己的产品
  • 深圳做百度网站seo教程培训
  • 做网站有什么关于财务的问题上海牛巨微seo
  • 哪里可以做虚拟货币网站b2b采购平台
  • 怎么看自己做没做网站地图爱站网关键词怎么挖掘
  • 政府网站建设与管理排行榜百度
  • 广州网站建设十年乐云seo互联网服务平台
  • 网站优化方法收录批量查询
  • 临沂建设中专官方网站福建seo推广方案
  • 专门做加盟的网站网络推广销售是做什么的
  • 广东省住房与城乡建设厅网站企业网站设计公司
  • 广州哪个公司做网站好口碑营销策略
  • 临沂网站设计价格北京seo网络优化招聘网
  • 公司做网站那家好成品在线视频免费入口
  • 腾讯云服务器怎么做网站2022近期时事热点素材
  • 哪些网站可以做付费视频教育培训机构十大排名