Javascript 如何将带有映射的键名更改为嵌套对象?
这是对象Javascript 如何将带有映射的键名更改为嵌套对象?,javascript,lodash,Javascript,Lodash,这是对象 { a: 1, b: { c: { d: 2 }, e: 3 } } 这是地图 { 'a': 'aaa', 'b': 'bbb', 'b.c.d': 'bcd' } 以下是预期结果 { aaa: 1, bbb: { c: { bcd: 2 }, e: 3 } } 我知道lodash中有一个函数。get可以获得类似b.c.d的值。 但是如何使用映射更改密钥名称呢?您可以通过跟踪当前路径,并
{
a: 1,
b: {
c: {
d: 2
},
e: 3
}
}
这是地图
{
'a': 'aaa',
'b': 'bbb',
'b.c.d': 'bcd'
}
以下是预期结果
{
aaa: 1,
bbb: {
c: {
bcd: 2
},
e: 3
}
}
我知道lodash中有一个函数。get
可以获得类似b.c.d
的值。
但是如何使用映射更改密钥名称呢?您可以通过跟踪当前路径,并使用以下方法将密钥构建到
映射中来递归执行此操作:
设o={a:1,b:{c:{d:2},e:3}
设映射={
‘a’:‘aaa’,
‘b’:‘bbb’,
“b.c.d”:“bcd”
}
函数makeObj(obj,map,p=[])){
设ret={}
Object.entries(obj.forEach)([k,v])=>{
让path=p.concat(k)//添加到当前路径
设mapKey=map[path.join('.')]|k
ret[mapKey]=(typeof v=='object')
?makeObj(v,map,path)//如果对象在当前路径上递归并传递
:v//否则设置该值
})
回程网
}
console.log(makeObj(o,map))