动态ID生成需求:以上一轮循环子ID作为下一轮父ID
搞定层级动态ID生成的方案来啦!
看你的需求,核心就是要生成一套层层递进的父子ID序列——初始从3生出3.1和3.2,之后每一轮都给上一轮所有最底层的节点各加一个.1的子ID,对吧?刚好我之前做过类似的需求,给你整理了清晰的实现思路和代码示例:
核心逻辑拆解
其实这个需求本质是跟踪每一轮的「待生成子节点的父ID」:
- 第一步先搞定初始的两个子节点
3.1、3.2,把它们记下来作为下一轮的父ID - 从第二轮开始,每一轮都遍历上一轮的所有父ID,给每个父ID拼上
.1生成子ID,同时记录父子关系 - 把新生成的子ID替换成下一轮的父ID列表,循环往复就行
代码实现(两种常用语言)
JavaScript 版本
function generateDynamicIds(initialParent, initialChildCount, rounds) { const result = []; // 第一轮:生成初始父节点的子节点 let currentParents = []; for (let i = 1; i <= initialChildCount; i++) { const id = `${initialParent}.${i}`; result.push({ ID: id, Parent: initialParent }); currentParents.push(id); } // 后续轮次:为每个当前父节点生成子节点 for (let round = 2; round <= rounds; round++) { const newParents = []; currentParents.forEach(parentId => { const childId = `${parentId}.1`; result.push({ ID: childId, Parent: parentId }); newParents.push(childId); }); currentParents = newParents; } return result; } // 示例:生成4轮(对应你要的到3.1.1.1.1的效果) const ids = generateDynamicIds(3, 2, 4); console.log(JSON.stringify(ids, null, 2));
运行后输出和你预期的完全一致:
[ {"ID": "3.1", "Parent": "3"}, {"ID": "3.2", "Parent": "3"}, {"ID": "3.1.1", "Parent": "3.1"}, {"ID": "3.2.1", "Parent": "3.2"}, {"ID": "3.1.1.1", "Parent": "3.1.1"}, {"ID": "3.2.1.1", "Parent": "3.2.1"}, {"ID": "3.1.1.1.1", "Parent": "3.1.1.1"}, {"ID": "3.2.1.1.1", "Parent": "3.2.1.1"} ]
Python 版本
如果你用Python的话,这个实现也很直观:
def generate_dynamic_ids(initial_parent, initial_child_count, rounds): result = [] # 第一轮生成初始子节点 current_parents = [] for i in range(1, initial_child_count + 1): id_str = f"{initial_parent}.{i}" result.append({"ID": id_str, "Parent": str(initial_parent)}) current_parents.append(id_str) # 后续轮次生成子节点 for _ in range(1, rounds): new_parents = [] for parent_id in current_parents: child_id = f"{parent_id}.1" result.append({"ID": child_id, "Parent": parent_id}) new_parents.append(child_id) current_parents = new_parents return result # 示例:生成4轮 ids = generate_dynamic_ids(3, 2, 4) for item in ids: print(item)
输出结果:
{'ID': '3.1', 'Parent': '3'} {'ID': '3.2', 'Parent': '3'} {'ID': '3.1.1', 'Parent': '3.1'} {'ID': '3.2.1', 'Parent': '3.2'} {'ID': '3.1.1.1', 'Parent': '3.1.1'} {'ID': '3.2.1.1', 'Parent': '3.2.1'} {'ID': '3.1.1.1.1', 'Parent': '3.1.1.1'} {'ID': '3.2.1.1.1', 'Parent': '3.2.1.1'}
小提示
initialChildCount参数可以调整初始父节点的子节点数量(这里设2就是生成3.1和3.2)rounds参数控制生成的总轮数,比如你要到3.1.1.1.1就设4轮就行- 每一轮都会自动更新父节点列表,确保只给当前最底层的节点生成子ID,完全符合你的需求
内容的提问来源于stack exchange,提问作者スペースタイム
相关产品推荐
相关产品推荐

