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

编写递归函数重构嵌套表格数据结构,提取子表格至同层级

解决方案

核心思路

递归遍历数据结构,将所有嵌套在非表格节点内的type: "table"节点提取到顶级数组中,同时从原父节点移除这些嵌套表格,保留原表格的结构完整性。

实现代码

function flattenNestedTables(root) {
  const result = [];
  // 深拷贝原始数据,避免修改原对象
  const processedRoot = JSON.parse(JSON.stringify(root));
  // 递归提取嵌套表格
  extractTables(processedRoot, result);
  // 将处理后的根表格放在结果数组最前面
  result.unshift(processedRoot);
  return result;
}

function extractTables(node, result) {
  // 如果当前节点没有子节点,直接返回
  if (!node.children || !Array.isArray(node.children)) return;

  // 收集需要提取的嵌套表格
  const tablesToExtract = [];
  // 过滤当前节点的子节点,移除表格类型的节点
  node.children = node.children.filter(child => {
    if (child.type === 'table') {
      tablesToExtract.push(child);
      return false;
    }
    // 递归处理非表格类型的子节点,提取更深层的嵌套表格
    extractTables(child, result);
    return true;
  });

  // 将提取到的表格添加到结果数组,并处理表格内部的嵌套表格
  tablesToExtract.forEach(table => {
    extractTables(table, result);
    result.push(table);
  });
}

使用示例

// 原始数据
const originalData = {
  "key": "parent_table",
  "title": "parent_table",
  "type": "table",
  "children": [
    // 此处填入你的原始数据内容
  ]
};

// 转换数据
const transformedData = flattenNestedTables(originalData);
console.log(JSON.stringify(transformedData, null, 2));

代码说明

  1. flattenNestedTables:初始化结果数组,深拷贝根节点防止修改原始数据,调用递归函数提取嵌套表格后,将处理后的根节点加入结果数组头部。
  2. extractTables:
    • 遍历当前节点的子节点,筛选并收集表格类型节点。
    • 递归处理非表格子节点,确保深层嵌套的表格也能被提取。
    • 将收集到的表格添加到结果数组,同时处理表格内部可能存在的更深层嵌套表格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:27:08