迭代深度优先遍历嵌套对象直接生成带全路径键值对数组实现求助
迭代版DFS遍历嵌套对象优化方案
修改后代码
function iterativeDft(root) { // 栈存储结构:[当前属性全路径, 当前对应值] const stack = [['', root]]; const result = []; // 可遍历类型判断:排除null,包含对象、数组 const isTraversable = val => val !== null && typeof val === 'object'; while (stack.length > 0) { const [currentPath, currentVal] = stack.pop(); if (isTraversable(currentVal)) { // 反转键值对后压栈,保证输出顺序和原结构属性顺序一致 const entries = Object.entries(currentVal).reverse(); for (const [key, val] of entries) { const newPath = currentPath ? `${currentPath}.${key}` : key; stack.push([newPath, val]); } } else { // 直接构造目标结构存入结果 result.push({ [currentPath]: currentVal }); } } return result; }
核心优化点
- 调整栈存储逻辑:不再存储需要后续拆分的拼接字符串,也不需要每次生成临时新对象压栈,改为存储
[当前路径, 当前值]的结构化元组,路径在压栈时直接拼接完成,省去后续转换步骤。 - 修复边界异常:补充了null值的判断,避免将typeof为object的null误判为可遍历对象导致运行报错。
- 减少多余操作:遍历到基础类型值时直接构造
{属性全路径: 对应值}的目标对象推入结果,同时通过反转键值对压栈的方式保证输出顺序,省去了原代码最后反转结果数组的操作。 - 降低性能开销:移除了每次遍历子节点时调用Object.fromEntries生成新对象的逻辑,减少了不必要的内存占用和运算消耗。
内容的提问来源于stack exchange,提问作者ard_evon
相关产品推荐
相关产品推荐

