const obj1 = {
a: 1,
b: {
f: '2',
g: '3',
},
c: {
d: [
1,
2,
{
e: true,
},
],
},
}
如上图是原对象,通过js代码转换为下图的对象
const obj2 = {
a: 1,
'b.f': '2',
'b.g': '3',
'c.d.0': 1,
'c.d.1': 2,
'c.d.2.e': true
}
实现的代码如下图
function plat(obj, prekey, resobj) {
// prekey是用于累加.的
prekey = prekey ? prekey + '.' : ''
let keys = Object.keys(obj)
keys.forEach((item) => {
let val = obj[item]
let type = typeof val
// 判断对象值是否为对象(包括对象和array)
if (type ==='object' && val) {
// 递归
plat(val, prekey + item, resobj)
} else {
// 有值
if (val !== null && val !== undefined) {
// 给传递的要改变的数组赋值
resobj[prekey + item] = val
}
}
})
}
plat(obj1, '', obj2)
console.log(obj2);