Javascript对象进行扁平化处理

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进行判定即可。

你可能感兴趣的:(前端,javascript)