JavaScript:在while循环内实现6层r属性嵌套对象的问题
问题分析与解决方案
核心问题
你的代码有两个关键问题导致无法实现目标嵌套结构:
- 循环逻辑错误:每次循环直接覆盖
result["r"],旧的嵌套对象被丢弃,最终只能得到一层结构 - 条件判断与需求相反:需求要求
num>12或num<1时执行逻辑,但原代码里是1<num<13才执行,不符合要求
修正后的代码
let num = 6; // 可替换为>12或<1的数值测试,比如num=13或num=0 if (num > 12 || num < 1) { let result = { l: num }; let currentNode = result; // 生成6层嵌套,循环6次 for (let i = 0; i < 6; i++) { currentNode.r = { l: num }; currentNode = currentNode.r; } // 最后一层的r可按需设置终止值,比如null currentNode.r = null; console.log(result); } else { throw new Error('Invalid number'); }
代码说明
- 修正条件判断:把
num <13 && num>1改成num>12 || num<1,匹配需求要求 - 嵌套实现逻辑:
- 先初始化最外层的
result对象 - 用
currentNode指针跟踪当前要添加子节点的位置,每次循环给currentNode.r赋值新对象,再把指针移到这个新对象上 - 循环6次后,就能得到6层嵌套的
{l:num, r:{l:num, r:{...}}}结构
- 先初始化最外层的
- 终止节点处理:最后一层的
r可根据需求设置,比如设为null避免无限嵌套
原代码问题拆解
原代码里result["r"] = o;每次都直接替换最外层的r属性,之前创建的对象没有被保留为嵌套结构,相当于每次都把旧的r覆盖掉,自然无法形成多层嵌套。而用指针跟踪当前节点的方式,能让每一层的r都指向新的子对象,从而构建出完整的嵌套链。
内容的提问来源于stack exchange,提问作者Abhinash Majhi
相关产品推荐
相关产品推荐

