我正在尝试以递归方式删除 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/