小编use*_*535的帖子

以递归方式删除所有带有空值的JSON密钥,如果删除了所有子密钥,则删除父密钥

我试图以递归方式删除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对象,它似乎达到了最大递归深度.我非常感谢有关调试的帮助 …

javascript algorithm recursion json

1
推荐指数
1
解决办法
1217
查看次数

为什么在我的 match 语句中用大括号包裹 None 会使下面的 Rust 代码起作用?

我有一个非常简单的 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)

rust

1
推荐指数
1
解决办法
64
查看次数

表达递归序列

我有这个顺序:

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.

python recursion sequence

-2
推荐指数
1
解决办法
107
查看次数

标签 统计

recursion ×2

algorithm ×1

javascript ×1

json ×1

python ×1

rust ×1

sequence ×1