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

如何通过递归将扁平数组转换为树形结构?

如何将扁平数组递归构建为树形结构

你的递归思路方向是对的,问题出在顶级节点的匹配逻辑上:原数组里的顶级节点(id=1、4)没有dependsOn属性,它们的dependsOn值是undefined,但你的函数默认parentId为null,两者不相等,导致顶级节点被过滤掉,自然生成不了正确的树形结构。

修正后的递归实现

function buildTree(arr, parentId = null) {
  return arr
    .filter(item => {
      // 匹配顶级节点:没有dependsOn,或者dependsOn为null/undefined
      if (parentId === null) {
        return item.dependsOn === undefined || item.dependsOn === null;
      }
      // 匹配子节点:dependsOn严格等于父节点id
      return item.dependsOn === parentId;
    })
    .map(item => ({
      ...item,
      // 可选:移除dependsOn属性,让结构和目标一致
      dependsOn: undefined,
      // 递归生成当前节点的子节点
      children: buildTree(arr, item.id)
    }));
}

调用示例

const result = buildTree(arr);
console.log(result);

逻辑说明

  1. 顶级节点筛选:当parentId为null时,找到所有没有dependsOn属性的项,作为树形结构的根节点。
  2. 递归生成子节点:对每个节点,递归查找数组中所有dependsOn等于当前节点id的项,作为它的children。
  3. 结构对齐:可选移除dependsOn属性,让最终结构和你给出的treeTo完全一致。

注:原目标结构中id=5的name是teste,但原数组里是dasdas,这是输入数据的小差异,不影响函数的树形转换逻辑。

内容的提问来源于stack exchange,提问作者Thiago Melo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:04:59