Javascript 使用动态键递归创建嵌套对象

Javascript 使用动态键递归创建嵌套对象,javascript,object,recursion,Javascript,Object,Recursion,我对递归很熟悉,但遇到了一个需要使用变量键创建嵌套对象的情况。我们已经看到了其他建议,可以使用诸如“b.c”之类的名称空间约定来确定在何处深度分配值(请参见下面的期望输出),但是在实现上有困难。结构可以无限嵌套 //源代码 常量输入={ a:{ 键入:“字符串”, 例:“1” }, b:{ 类型:“对象”, 另一个:{ c:{ 键入:“字符串”, 例:“2” } } } } //渴望的 常量输出={ a:‘1’, b:{ c:'2' } } //尝试 函数遍历(数据,主={}){ Object.

我对递归很熟悉,但遇到了一个需要使用变量键创建嵌套对象的情况。我们已经看到了其他建议,可以使用诸如“b.c”之类的名称空间约定来确定在何处深度分配值(请参见下面的期望输出),但是在实现上有困难。结构可以无限嵌套

//源代码
常量输入={
a:{
键入:“字符串”,
例:“1”
},
b:{
类型:“对象”,
另一个:{
c:{
键入:“字符串”,
例:“2”
}
}
}
}
//渴望的
常量输出={
a:‘1’,
b:{
c:'2'
}
}
//尝试
函数遍历(数据,主={}){
Object.entries(data).reduce((集合,[key,value])=>{
开关(值.类型){
大小写“string”:
集合[键]=value.ex;
打破
违约:
集合[键]=遍历(value.other,集合);
}
回收;
},硕士);
}

运行此函数将返回未定义的

嵌套的
遍历
应获得一个全新的对象作为第二个参数,您还需要从函数返回一个结果,请尝试:

//源代码
常量输入={
a:{
键入:“字符串”,
例:“1”
},
b:{
类型:“对象”,
另一个:{
c:{
键入:“字符串”,
例:“2”
}
}
}
}
//尝试
函数遍历(数据,主={}){
返回Object.entries(data).reduce((集合,[key,value])=>{
开关(值.类型){
大小写“string”:
集合[键]=value.ex;
打破
违约:
集合[key]=遍历(value.other,{});
}
回收;
},硕士);
}

控制台日志(遍历(输入))Nested
transverse
应获得一个全新的对象作为第二个参数,您还需要从函数返回一个结果,请尝试:

//源代码
常量输入={
a:{
键入:“字符串”,
例:“1”
},
b:{
类型:“对象”,
另一个:{
c:{
键入:“字符串”,
例:“2”
}
}
}
}
//尝试
函数遍历(数据,主={}){
返回Object.entries(data).reduce((集合,[key,value])=>{
开关(值.类型){
大小写“string”:
集合[键]=value.ex;
打破
违约:
集合[key]=遍历(value.other,{});
}
回收;
},硕士);
}

控制台日志(遍历(输入))
是另一个固定名称吗?如果不是,为什么预期的结果不是
{a:'1',b:{other:{c:'2'}}}
?键other、ex和type都是固定的,并在源数据结构中重复它们自己-它实际上是一个开放api规范的结构,但我将这些键交换到它们,以使问题变得更简单,因为
另一个
固定名称?如果不是,为什么预期的结果不是
{a:'1',b:{other:{c:'2'}}}
?键other、ex和type都是固定的,并在源数据结构中重复它们自己-它实际上是一个开放api规范的结构,但我将这些键交换到了它们以使问题更简单