我试图以递归方式删除JSON对象和所有子对象中的空值.如果子对象键全部被删除,那么我也希望删除该子对象.
即.
x = {
"applicant": {
'first_name': null,
'last_name': null,
'employment_type': null
},
'phone': 1123123,
'branch': null,
'industry': {
'id': 1,
'name': null
},
"status": "333"
}
Run Code Online (Sandbox Code Playgroud)
应该变成这样:
x = {
'phone': 1123123,
'industry': {
"id": 1
},
"status": "333"
}
Run Code Online (Sandbox Code Playgroud)
这是我写的用于删除具有空值的所有键的函数:
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]
}
}
Run Code Online (Sandbox Code Playgroud)
但这不会删除没有子项的父键:
所以不是上面的结果,我得到这个:
x = {
"applicant":{},
"phone":1123123,
"industry":{
'id': 1
}
"status": "333"
}
Run Code Online (Sandbox Code Playgroud)
如您所见,它不会删除申请人密钥.我如何在功能中检查?还是需要在一个单独的函数中编写,我调用它后调用delKeys()?
此外,有没有人看到这个达到最大递归深度?我尝试过更大的JSON对象,它似乎达到了最大递归深度.我非常感谢有关调试的帮助 …
我有一个非常简单的 Rust 程序,其中有一个 hashmap<String, Vec> ,如果键不存在,我想插入一个新数组,如果键存在,则推送到现有数组。但是,如果我删除 None 周围的大括号(如代码 2 中所示),则会出现以下错误。这是怎么回事?代码 1 按预期工作,但我只是不明白为什么。
error[E0308]: `match` arms have incompatible types
--> src/main.rs:97:20
|
94 | / match get_option {
95 | | None => map.insert(str_check, vec![String::from("inserted!")]),
| | ------------------------------------------------------ this is found to be of type `Option<Vec<String>>`
96 | |
97 | | Some(v) => v.push(String::from("Chris")),
| | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Option<Vec<String>>`, found `()`
98 | | }
| |_____- `match` arms have incompatible types
|
= note: expected enum `Option<Vec<String>>`
found unit …Run Code Online (Sandbox Code Playgroud) 
我有这个顺序:
2, 10, 10, 130, 130, 130, 130, 130, ..., a??=130, 17290, ...
Run Code Online (Sandbox Code Playgroud)
我的函数从开始工作n > 3,否则a?, a?, a? = 2, 2, 2它应该返回a?, a?, a?, a? = 2, 10, 10, 130.
这是我到目前为止所拥有的:
def s(n):
if n == 1:
return 2
elif math.floor(math.sqrt(n)) == math.floor(math.sqrt(n-1)):
return s(n-1)
else:
return s(n-1) ** 2 + 3 * s(n-1)
Run Code Online (Sandbox Code Playgroud)
它出什么问题了?
请注意,我正在尝试返回序列的第n个项而不是整个序列,直到n.