javascript - 递归删除所有具有空值的 JSON 键,如果所有子键都被删除,则删除父键

标签 javascript json algorithm recursion

我正在尝试以递归方式删除 JSON 对象和所有子对象中的空值。如果子对象键全部删除,那么我希望该子对象也被删除。

即。

x = {
  "applicant": {
    'first_name': null,
    'last_name': null,
    'employment_type': null
  },
  'phone': 1123123,
  'branch': null,
  'industry': {
    'id': 1,
    'name': null
  },
  "status": "333"
}

应该变成这样:

x = {
    'phone': 1123123,
    'industry': {
         "id": 1
     },
     "status": "333"
    }

这是我编写的用于删除所有具有空值的键的函数:

function delKeys(app){
  for(key in app){
    if(app[key] !== null && typeof(app[key]) === 'object'){
      delKeys(app[key])
    } 
    if(app[key] === null){
      delete app[key]
      }
  }

但这不会删除没有子项的父键:

所以我得到的不是上面的结果:

x = {
    "applicant":{},
    "phone":1123123,
    "industry":{
       'id': 1
     }
     "status": "333"
     }

如您所见,它不会删除申请人 key 。我将如何在函数中检查它?或者它是否需要写在我调用 delKeys() 之后调用的单独函数中?

此外,有人看到这达到了最大递归深度吗?我尝试过使用更大的 JSON 对象,它似乎达到了最大递归深度。我非常感谢帮助调试

谢谢。

最佳答案

删除空键后需要检查app[key]是否有键。

const x = {
  "applicant": {
    'first_name': null,
    'last_name': null,
    'employment_type': null
  },
  'phone': 1123123,
  'branch': null,
  'industry': {
    'id': 1,
    'name': null
  },
  "status": "333"
}

function isEmpty(obj) {
  for(var key in obj) return false;

  return true
}

function delKeys(app){
  for(var key in app){
    if(app[key] !== null && typeof(app[key]) === 'object'){
      delKeys(app[key])

      if(isEmpty(app[key])) {
        delete app[key]
      }
    } 
    if(app[key] === null){
      delete app[key]
    }
  }
}

delKeys(x)

console.log(x)

关于javascript - 递归删除所有具有空值的 JSON 键,如果所有子键都被删除,则删除父键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44910843/

相关文章:

javascript - if 语句是否创建局部作用域?

javascript - 运行代码,例如登录,取决于执行哪个测试套件

java - 在 Java 中取消转义 JavaScript 转义值

javascript - 增强千位分隔符的正则表达式?

json - org.openx.data.jsonserde.json.JSONObject 无法转换为 org.openx.data.jsonserde.json.JSONArray

java - 这个反向单链表算法的复杂度?

algorithm - 找到最小的重叠作业集

sql - 列存储索引和 nvarchar(max)

json - 如何使用 libcurl 发布 JSON 缓冲区?

计算形式 1/r 总和为 1 的 k 个分数的算法