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

递归查询自关联表数据生成一维数组的代码错误排查

问题原因

你的代码存在两个核心问题:

  1. 递归函数findChildren返回值类型不统一:存在子节点时返回数组,没有子节点时返回单个对象,导致后续拼接结构混乱。
  2. 递归返回的子级结果本身就是数组,直接展开...resolveResponses会把整个子数组作为外层数组的元素,最终产生嵌套结构。

解决方案

统一递归函数的返回值类型为数组,同时对递归获取的子级结果做扁平化处理:

async function detail({ id }) {
  const findChildren = async ({ id }) => {
    const idea = await find({ id });
    const responses = await responseIdeas({ parentIdeaId: id });
    // 统一返回数组格式
    if (responses.length !== 0) {
      const resolveResponses = await Promise.all(
        responses.map(async ({ id }) => findChildren({ id }))
      );
      // 拍平递归返回的多层数组再拼接
      return [idea, ...resolveResponses.flat()];
    }
    return [idea];
  };

  return findChildren({ id });
}

运行验证

修改后执行run()函数,输出结果为:

[
  {
    "id": "1",
    "title": "Title 1",
    "parentIdeaId": null
  },
  {
    "id": "2",
    "title": "Title 2",
    "parentIdeaId": 1
  },
  {
    "id": "3",
    "title": "Title 3",
    "parentIdeaId": 2
  }
]

完全符合预期的扁平结构要求。

内容的提问来源于stack exchange,提问作者Dominique Altrez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:18:01