UI菜单JSON按rank排序异常:两位数rank排序失效问题求助
菜单JSON按Rank排序问题解决方法
问题根源
你当前的代码仅对顶层菜单节点做了排序,完全没处理嵌套的子菜单;而且如果没有递归遍历所有层级的child列表,子菜单的两位数rank(如"10"、"11")会因为没被正确转成整数排序,导致位置异常。
解决方案
需要编写一个递归函数,同时处理顶层菜单和所有嵌套子菜单的排序,确保每个层级的节点都按rank的整数值排序:
def sort_menu_nodes(nodes): # 按rank转整数排序当前层级节点 sorted_nodes = sorted(nodes, key=lambda x: int(x.get('rank', float('inf')))) # 递归处理每个节点的子菜单 for node in sorted_nodes: if 'child' in node and isinstance(node['child'], list): node['child'] = sort_menu_nodes(node['child']) return sorted_nodes # 应用到你的菜单结构 config['menustructure'] = sort_menu_nodes(config['menustructure'])
说明
- 函数会先对当前层级的所有节点,将
rank字符串转为整数后排序,解决两位数rank的排序问题; - 递归遍历每个节点的
child列表,对所有嵌套子菜单执行同样的排序逻辑; - 用
float('inf')作为默认值,确保没有rank的节点会被排到最后。
内容的提问来源于stack exchange,提问作者vineet singh
相关产品推荐
相关产品推荐

