JavaScript中修改字典键及动态创建n维对象的实现问询
完整实现:递归构建n维嵌套对象
我来帮你完成这个递归实现,刚好能满足你要的n维对象构建需求。首先咱们先明确核心逻辑:根据item里的键顺序,依次用children中对应的值作为层级键,最终嵌套出n层的对象结构,最后一层是空对象。
完整代码实现
// 初始化所需变量 let parent = {}; let finalObj = { parent }; function buildNestedObj(currentObj, keys, children, index) { // 递归终止条件:当处理完所有层级时退出 if (index >= keys.length) { return; } // 获取当前层级对应的children值 const currentKey = keys[index]; const nestedKey = children[currentKey]; // 给当前对象添加层级属性,值为空对象 currentObj[nestedKey] = {}; // 递归处理下一层级,把新创建的空对象作为当前操作对象 buildNestedObj(currentObj[nestedKey], keys, children, index + 1); } // 测试用例 const children = { 'value1' : 'some1' , 'value2' : 'some2' , 'value3' :'some3' }; const item = { 'key1' : 'value1' , 'key2':'value2' , 'key3':'value3' }; // 获取item的键数组(保持顺序,对应n的深度) const itemKeys = Object.keys(item); // 从索引0开始递归构建 buildNestedObj(parent, itemKeys, children, 0); console.log(finalObj); // 输出结果:{ parent: { some1: { some2: { some3: {} } } } }
代码逻辑解释
- 参数设计:递归函数
buildNestedObj的参数分别是:currentObj:当前正在构建的层级对象keys:item的键数组(保证层级顺序)children:提供层级值映射的对象index:当前处理的层级索引(用来控制递归深度)
- 终止条件:当
index等于keys的长度时,说明所有层级都已构建完成,退出递归。 - 层级构建:每次递归中,先取出当前
item键对应的children值作为新层级的键,给currentObj添加这个属性并赋值为空对象,然后把这个空对象作为下一层级的操作对象,继续递归。 - 初始化与调用:我们先把
parent挂载到finalObj上,然后通过Object.keys(item)获取item的键顺序(这里的长度就是你说的n),最后从索引0开始启动递归。
针对你原有代码的补充说明
你原来的makechildren函数参数传递有问题,直接传{children}会把children包装成一个新对象,导致无法正确获取下一层的映射值。咱们上面的实现通过传递当前操作的对象和层级索引,完美解决了递归过程中上下文传递的问题。
内容的提问来源于stack exchange,提问作者uniXVanXcel
相关产品推荐
相关产品推荐

