简体   繁体   English

从对象中删除未定义的属性

[英]Remove undefined properties from object

I would like to recursively clean any fields which are undefined, or have an empty object as parent like this following: 我想递归清除所有未定义的字段,或将空对象作为父对象,如下所示:

Example: 例:

{
  "a": {
    "b": {
      "c": undefined,
    }
  },
  "d": undefined,
  "e": {
    f: undefined,
  },
  "g": {
     "h": 'I',
     "j": undefined,
  },
  "k": "L",
  "m": {
     "n": {
       "o": {
         "z": undefined,
       }
     },
    "p": 'toto'
   }
}

I am expecting the following result : 我期待以下结果:

{
  "g": {
    "h": 'I',
  },
  "k": 'L',
  "m": {
    "p": 'toto'
  }
}

Thank you for your help 谢谢您的帮助

 function filter(obj) { for (var key in obj) { if (obj[key] === undefined) { delete obj[key]; continue; } if (obj[key] && typeof obj[key] === "object") { filter(obj[key]); if (!Object.keys(obj[key]).length) { delete obj[key]; } } } return obj; } var data = { "a": { "b": { "c": undefined, } }, "d": undefined, "e": { "f": undefined, }, "g": { "h": 'I', "j": undefined, }, "k": "L", "m": { "n": { "o": { "z": undefined, } }, "p": 'toto' } }; console.log(filter(data)); 

Simply delete these keys and iterate recursively. 只需删除这些键并递归进行迭代即可。

 function cleanArray(actual) { var newArray = new Object(); newArray=JSON.parse(JSON.stringify(actual)); return newArray; } var obj={ "a": { "b": { "c": undefined, } }, "d": undefined, "e": { f: undefined, }, "g": { "h": 'I', "j": undefined, }, "k": "L", "m": { "n": { "o": { "z": undefined, } }, "p": 'toto' } }; console.log(cleanArray(obj)); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM