对于一个 JS 对象,value 值可以是 Object 类型,因此可能会有很深的嵌套层次。现在要求把 JS 对象打平为一层,key 值使用 . 拼接,示例如下:
原始对象:
{
x : {
a : 'zxc',
b : 'ert'
},
y : {
z : 1234
},
arr : [
2,3
]
}
打平后:
{
'x.a' : 'zxc',
'x.b' : 'ert',
'y.z' : 1234,
'arr.0' : 2,
'arr.1' : 3
}
原始对象:
{
x : {
y: {
z: 12,
u: 15
}
}
}
打平后:
{
'x.y.z': 12,
'x.y.u': 15
}
要求:函数命名为 flatObj,输入原对象,返回打平后新的对象。
//obj 是原对象,fobj 是打平后的对象。
let fobj = flatObj(obj)
提示:使用递归实现,typeof 和 Array.isArray 检测数组类型。
求采纳
var b = {
x : {
a : 'zxc',
b : 'ert'
},
y : {
z : 1234
},
arr : [
2,3
]
}
function dg(obj,now_key,new_obj,is_root_property){
var keys = Object.keys(obj)
for(let i in keys){
var sufflex_key = is_root_property?
(Array.isArray(obj)?i:keys[i]):(Array.isArray(obj)?('.'+i):('.'+keys[i]))
if(typeof(obj[keys[i]]) !== 'object'){
new_obj[now_key+sufflex_key]=obj[keys[i]]
}else{
dg(obj[keys[i]],now_key+sufflex_key,new_obj,false)
}
}
}
new_obj = {}
dg(b,'',new_obj,true)
console.log(new_obj)