You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

改造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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:35:25