改造JS用户推荐树函数实现动态无限层级节点展示
改造无限层级推荐树函数方案
原函数通过硬编码节点(a-q)实现固定层级的推荐树查询,无法支持动态扩展层级。以下是两种改造方案,均通过递归实现无限层级的动态查询:
方案1:扁平键值对结构(兼容原返回格式逻辑)
该方案保持类似原函数的扁平键值对形式,但通过动态生成键名支持无限层级:
const showTreePage = async (id) => { const tree = {}; // 递归获取节点及其下级 const fetchNode = async (userId, nodeKey) => { // 存入当前节点用户信息 tree[nodeKey] = await getUser(userId); // 处理左子节点 const leftNodes = await getPositionUser(userId, "left"); if (leftNodes?.length > 0) { const leftKey = `${nodeKey}_left`; tree[leftKey] = leftNodes; // 递归查询左子节点的下级 await fetchNode(leftNodes[0].id, leftKey); } // 处理右子节点 const rightNodes = await getPositionUser(userId, "right"); if (rightNodes?.length > 0) { const rightKey = `${nodeKey}_right`; tree[rightKey] = rightNodes; // 递归查询右子节点的下级 await fetchNode(rightNodes[0].id, rightKey); } }; // 从根节点启动查询 await fetchNode(id, "root"); return tree; };
方案2:嵌套树形结构(更直观的层级展示)
该方案返回嵌套对象结构,每个节点包含自身信息及左右子节点,更适合后续层级渲染:
const showTreePage = async (id) => { // 递归构建嵌套树 const buildNestedTree = async (userId) => { const user = await getUser(userId); const node = { user, left: null, right: null }; // 查询并递归构建左子树 const leftNodes = await getPositionUser(userId, "left"); if (leftNodes?.length > 0) { node.left = await buildNestedTree(leftNodes[0].id); } // 查询并递归构建右子树 const rightNodes = await getPositionUser(userId, "right"); if (rightNodes?.length > 0) { node.right = await buildNestedTree(rightNodes[0].id); } return node; }; return await buildNestedTree(id); };
改造说明
- 核心逻辑:通过递归函数自动遍历每个节点的左右子节点,直到没有下级节点为止
- 动态扩展:无需手动添加节点定义,支持任意深度的推荐树查询
- 代码优化:消除原函数中重复的条件判断和API调用,提升代码复用性和可维护性
内容的提问来源于stack exchange,提问作者emmanuel elias
相关产品推荐
相关产品推荐

