js中多级对象转化问题

hope93
  • 460

有什么比较简化的方法可以把如下对象:

 let obj = {

 "a.c.d": 1,

 "e.d.w": 2

 }

转成:

{
 a:{
   c: {
     d: 1
   }
 },

 e:{
   d:{
    w: 2
   }
 }
}
回复
阅读 921
4 个回答
✓ 已被采纳
 var obj = {

 "a.c.d": 1,

 "e.d.w": 2

 }
 
 function restructObject(obj) {
   return Object.keys(obj).reduce((robj,propstr) => {
     
     propstr.split('.').reduce((res, prop, i, props) => {
       if(i == props.length-1) return res[prop] = obj[propstr];
       return res[prop] = {}
     }, robj);
     
     return robj
   }, {});
 }

restructObject(obj)

image.png

`function handle(obj) {

let obj2 = {};

for (var k in obj) {

var data = k.split('.');

data.reduce((prev, cur, index, arr) => {

if (!prev[cur]) {//不存在等于空对象

prev[cur] = {};

}

if (index + 1 == arr.length) {

if (Object.prototype.toString.call(obj[k]) === '[object Object]') {//值为对象递归调用

prev[cur] = handle(obj[k])

} else {

prev[cur] = obj[k]

}

}

return prev[cur]

}, obj2)

}

return obj2

}`

感觉也没啥简便办法。
image.png

用lodash的set函数

宣传栏