对象的扁平化

322 阅读1分钟

JavaScript如何将层级Json转换成平级Json, 同时过滤掉为nullundefined的属性值?。例如:

var obj = {
  "A": {
    "a0": null,
    "a1": undefined,
    "a2": 2
   },

  "B": {
     "b": [3, 1, 4]
     }
}

转化为:

{
    "A.a2": 2,
    "B.b.0": 3,
    "B.b.1": 1,
    "B.b.2": 4
}

实现代码

  let comType=['object','array']
  let result={};
  function plat(obj, prekey, resobj){
    prekey = prekey?prekey+'.':''
    let keys = Object.keys(obj)
    keys.forEach(item=>{
      let val = obj[item]
      let type = typeof val
      if(comType.indexOf(type) != -1 && val){
        plat(val,prekey+item,resobj);
      }
      else{
        if(val !== null  && val !== undefined){
          resobj[prekey+item]=val;
        }
      }
    })
  }
  plat(obj, '', result)
  console.log(result)