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

求递归算法为嵌套数组元素添加parentId关联其父元素

递归添加parentId实现嵌套数组元素关联

原代码问题分析

你的代码仅能处理第一层嵌套元素的核心原因:

  • linkNestedElements函数中,return arr2写在了for...of循环内部,导致循环仅执行一次(处理数组第一个元素)就直接返回,剩余元素完全被忽略。
  • 拆分的linkElements函数属于冗余设计,单个递归函数即可完成所有层级的处理。

修正后的递归实现

下面是一个简洁且能处理任意深度嵌套的递归函数:

const addParentIds = (items, parentId = null) => {
  for (const item of items) {
    // 为当前元素添加parentId
    item.parentId = parentId;
    // 递归处理子元素(可选链+长度判断,避免空数组/undefined报错)
    if (item.children?.length) {
      addParentIds(item.children, item.id);
    }
  }
  return items;
};

代码说明

  • 函数接受两个参数:待处理的元素数组items,以及父元素IDparentId(顶层元素默认parentId为null)。
  • 遍历数组时直接为每个元素添加parentId属性,无需额外赋值操作。
  • 若当前元素存在非空的children数组,递归调用自身处理子元素,传入当前元素的id作为子元素的parentId。
  • 直接修改原对象属性,若需要保留原数组不被修改,可以先对数组做深拷贝后再处理。

测试示例

// 测试用例
const testData = [
  {
    id: '1',
    children: [
      {
        id: '1-1',
        children: [
          { id: '1-1-1' },
          { id: '1-1-2' }
        ]
      },
      { id: '1-2' }
    ]
  },
  { id: '2' }
];

addParentIds(testData);

// 验证结果
console.log(testData[0].children[0].parentId); // 输出 '1'
console.log(testData[0].children[0].children[0].parentId); // 输出 '1-1'
console.log(testData[1].parentId); // 输出 null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:43:20