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

嵌套家族树转JSON数组:添加祖父ID及去除全局变量问询

实现方案

可以通过递归扁平化的方式处理嵌套家族树,无需全局变量,直接返回目标JSON数组。核心思路是在递归过程中传递当前节点的parentId和grandparentId,逐层构建每个节点的条目并合并结果。

代码实现

function flattenFamilyTree(node, parentId = null, grandparentId = null) {
  // 生成当前节点的基础条目
  const currentItem = {
    id: node.id,
    name: node.name, // 可根据你的实际字段调整
    parentId: parentId,
    grandparentId: grandparentId
  };

  // 递归处理子节点:如果存在children字段,遍历每个子节点并传递父/祖父ID
  const childItems = node.children 
    ? node.children.flatMap(child => flattenFamilyTree(child, node.id, parentId))
    : [];

  // 合并当前节点和子节点的结果,返回一维数组
  return [currentItem, ...childItems];
}

// 示例输入
const myObj = {
  id: 1,
  name: '祖父',
  children: [
    {
      id: 2,
      name: '父亲',
      children: [
        { id: 3, name: '儿子' },
        { id: 4, name: '女儿' }
      ]
    },
    {
      id: 5,
      name: '叔伯',
      children: [{ id: 6, name: '堂弟' }]
    }
  ]
};

// 调用并输出结果
console.log(JSON.stringify(flattenFamilyTree(myObj), null, 2));

关键说明

  • 无全局变量:递归函数每次调用都会返回当前节点及所有子节点的扁平化数组,通过扩展运算符...合并结果,全程不需要外部状态。
  • grandparent字段传递:递归处理子节点时,把当前节点的parentId作为子节点的grandparentId,完美实现祖父ID的关联。
  • 灵活适配:如果你的家族树节点字段不是children、name,只需修改代码中对应的字段名即可。
  • 数组扁平化:使用flatMap替代map,避免子节点递归返回的数组嵌套,直接得到一维结果数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:34:56