Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将带有映射的键名更改为嵌套对象?_Javascript_Lodash - Fatal编程技术网

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))