js中多级对象转化问题

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

 let obj = {

"a.c.d": 1,

"e.d.w": 2

}

转成:

{

a:{

c: {

d: 1

}

},

e:{

d:{

w: 2

}

}

}

回答

 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函数

以上是 js中多级对象转化问题 的全部内容, 来源链接: utcz.com/a/43065.html

回到顶部