如何按从最内层到最外层顺序调用嵌套JSON对象的func方法?
如何从内到外执行嵌套JSON对象中的方法?
嘿,这个问题其实很好解决,核心思路就是先递归遍历到最内层的节点,再回溯着往外依次执行对应的方法。我给你用几种常用语言的示例来演示,一看就懂:
JavaScript实现
我们可以写一个递归函数,优先处理内层的nest对象,等最深处的节点处理完,再回头执行外层的方法:
function executeNestedFuncs(obj) { // 先钻到最内层,处理嵌套的子对象 if (obj.nest) { executeNestedFuncs(obj.nest); } // 内层处理完了,再执行当前层的func console.log(`执行方法: ${obj.func}`); // 如果要调用实际的方法,可以用映射对象,比如: // const funcMap = { run: () => console.log('正在跑步'), walk: () => console.log('正在走路'), sprint: () => console.log('正在冲刺') }; // funcMap[obj.func](); } // 测试示例 const nestedObj = {"func" : "sprint", "nest" : {"func" : "walk", "nest": {"func" : "run"}}}; executeNestedFuncs(nestedObj); // 输出顺序: // 执行方法: run // 执行方法: walk // 执行方法: sprint
Python实现
Python的思路完全一致,用递归先触达最内层,再回溯执行:
def execute_nested_funcs(obj): # 先处理内层嵌套 if 'nest' in obj: execute_nested_funcs(obj['nest']) # 执行当前层的方法 print(f"执行方法: {obj['func']}") # 如果要调用实际方法,可以用字典映射: # def run(): print('正在跑步') # def walk(): print('正在走路') # def sprint(): print('正在冲刺') # func_map = {'run': run, 'walk': walk, 'sprint': sprint} # func_map[obj['func']]() # 测试示例 nested_obj = {"func" : "sprint", "nest" : {"func" : "walk", "nest": {"func" : "run"}}} execute_nested_funcs(nested_obj) # 输出顺序: # 执行方法: run # 执行方法: walk # 执行方法: sprint
进阶:迭代版(避免递归深度溢出)
如果你的JSON嵌套层数特别多(比如几十上百层),递归可能会触发栈溢出错误,这时候可以改成迭代的方式:先把所有func按从外到内的顺序收集起来,反转后再依次执行:
JavaScript迭代示例
function executeNestedFuncsIterative(obj) { const funcList = []; let currentNode = obj; // 先遍历所有节点,收集外层到内层的func while (currentNode) { funcList.push(currentNode.func); currentNode = currentNode.nest; } // 反转数组,变成从内到外的顺序,然后执行 funcList.reverse().forEach(func => { console.log(`执行方法: ${func}`); // 实际调用方法:funcMap[func](); }); }
Python迭代示例
def execute_nested_funcs_iterative(obj): func_list = [] current_node = obj # 收集外层到内层的func while current_node: func_list.append(current_node['func']) current_node = current_node.get('nest') # 反转后执行 for func in reversed(func_list): print(f"执行方法: {func}") # 实际调用方法:func_map[func]()
这样不管嵌套多少层,都能安全地按顺序执行。
内容的提问来源于stack exchange,提问作者user3277468
相关产品推荐
相关产品推荐

