
js for循环 递归 return 失败
发布日期:2021-05-20 04:10:37
浏览次数:16
分类:精选文章
本文共 1349 字,大约阅读时间需要 4 分钟。
优化代码的递归方法:从线性循环到模块化迭代的升级
当我们需要在菜单列表中查找与某个特定ID匹配的对象时,选择合适的方法至关重要。以下是针对这种场景的两种解决方案的对比及其优化方法。
旧方法:线性递归
for (let i = 0, len = menuList.length; i < len; i++) { if (Number(menuList[i].id) === Number(obj.id)) { return menuList[i]; } if (menuList[i].children) { this.findTreeOfObj(menuList[i].children, obj); }}
这种方法使用了一个线性循环,逐项检查菜单列表中的每个对象。一旦发现ID匹配,则直接返回该对象;若匹配未找到,继续处理子项目。这种方法在小规模项目中表现良好,但在复杂的菜单树结构中存在效率问题,尤其当目标对象多次追踪时。
优化方法:模块化迭代
let result = {}; // 初始化结果对象menuList.forEach(item => { const loop = (data) => { if (Number(data.id) === Number(obj.id)) { result = data; // 设置最终结果 return result; // 返回结果以终止递归 } let child = data.children; // 获取子项目 if (child) { for (let i = 0; i < child.length; i++) { loop(child[i]); // 继续查找子项目 } } }; loop(item); // 初始化循环});return result; // 返回最终结果
这种方法对旧代码进行了优化,改用了模块化的迭代策略。具体表现为:
清晰的模块化结构
将查找逻辑封装到内部函数loop
中,使代码层次更加清晰,便于管理和维护。优化变量使用
通过result
变量直接存储匹配的对象,避免了多次返回上升的层级的问题。更高效的查找路径
每次递归仅处理当前节点及其子节点,减少不必要的重复检查。避免重复代码
通过函数loop
的重用,将查找逻辑从外层循环中解耦,提升代码可读性。更好地处理树结构
适合处理层级结构化的数据,能够高效地定位所需对象。why this approach works better?
- 性能提升:减少重复访问和递归层级,提升查找效率。
- 代码简洁:模块化结构降低代码复杂度,便于维护。
应用场景
这种方法适用于处理菜单树型数据、层级结构数据等场景,尤其是需要在多层级结构中定位特定对象的场景。
通过以上方法的对比可以看出,选择合适的数据处理方法对提升代码性能和可读性至关重要。新的模块化迭代方法不仅实现了同样的功能,还提高了代码的可维护性和效率。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月15日 10时50分35秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
70. 爬楼梯
2023-01-23
7B2 PRO主题5.4.2免授权直接安装
2023-01-23
7大常用JCL 模板
2023-01-23
80个Python经典资料(教程+源码+工具)汇总——下载目录
2023-01-23
80个Python经典资料(教程+源码+工具)汇总——下载目录
2023-01-23
8个微信实用技巧,你知道多少?
2023-01-23
8点FFT的C语言实现
2023-01-23
950个织梦网dede模板源码
2023-01-23
: bad interpreter: 没有那个文件或目录
2023-01-23
@Cacheable@CacheEvict@CachePut
2023-01-23
2018信息平台专场招聘
2023-01-23
@ControllerAdvice用法
2023-01-23
#VERDI# 关于Verdi使用的几个常用技巧整理
2023-01-23
@Resource注解的使用
2023-01-23
@ResponseBody 和 @RequestBody
2023-01-23
A + B 九度oj
2023-01-23