Javascript对象进行扁平化处理
笔主在经过多次的笔试中,发现经常会遇到对象扁平化处理的编程题,但是在笔试过程中,脑子一片空白,以至于没有平常心的去对待问题的本质。
扁平化处理简而言之就是对对象中的对象提取出来,放在一个对象里面,形象的说就是把儿子的后代当成自己的儿子。
实现原理是对对象进行遍历,如果值为对象,则进行递归调用,如果不为对象,将值推入res中。
var obj = {
a:[1,2],
b:2,
c:{
c:3,
d:4,
e:{
e:5,
f:6
}
}
}
function objFun(obj){
var res = {
} //定义一个对象,用来存储结果
function isObj(obj){
//定义一个函数,用来对obj进行遍历
for(var key in obj){
if(Object.prototype.toString.call(obj[key]) == '[object Object]'){
//如果值为对象,则进行递归
isObj(obj[key]);
}else{
//不为对象则将值添加给res
res[key] = obj[key]
}
}
}
isObj(obj) //调用函数
return res //返回结果
}
console.log(objFun(obj)); //{ a: [ 1, 2 ], b: 2, c: 3, d: 4, e: 5, f: 6 }
对数组的扁平化也是同理,如果要实现二合一,则调用函数前对参数进行判断,判断其为数组或是对象即可,如图上的objFun(obj),对obj进行判定即可。