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

如何用JavaScript高阶函数提取JSON对象中N级父子节点

提取树形JSON的N级父子节点路径:推荐用reduce高阶函数

嘿,针对你这个需求,Array.prototype.reduce 是最适合的高阶函数——它可以递归遍历树形结构,同时累积每一条完整的父子节点路径,完美匹配你想要的空格分隔输出格式。

先明确你的需求

你需要把给定的树形JSON数组(包含父子嵌套节点),提取所有层级的节点路径,每条路径的节点名称用空格分隔输出,对应你提供的JSON,期望输出是:

Matae1
Matae2
Matae3 Child1

你的原始JSON数据

[
  {
    "children": [],
    "id": 35,
    "map_data": {"தாலூகா": "மானாமதுரை"},
    "name": "Matae1"
  },
  {
    "children": [],
    "id": 36,
    "map_data": {"தாலூகா": "மானாமதுரை"},
    "name": "Matae2"
  },
  {
    "children": [
      {
        "children": [],
        "id": 39,
        "map_data": {"தாலூகா": "மானாமதுரை"},
        "name": "Child1"
      }
    ],
    "id": 36,
    "map_data": {"தாலூகா": "மானாமதுரை"},
    "name": "Matae3"
  }
]

基于reduce的实现代码

我们可以写一个递归的reduce调用,来收集所有节点路径:

function extractAllPaths(nodes, parentPath = '') {
  return nodes.reduce((accumulatedPaths, currentNode) => {
    // 拼接当前节点的完整路径
    const currentFullPath = parentPath ? `${parentPath} ${currentNode.name}` : currentNode.name;
    // 把当前路径加入结果数组
    accumulatedPaths.push(currentFullPath);
    // 如果当前节点有子节点,递归处理子节点并合并结果
    if (currentNode.children.length > 0) {
      accumulatedPaths.push(...extractAllPaths(currentNode.children, currentFullPath));
    }
    return accumulatedPaths;
  }, []);
}

// 调用示例
const yourJsonData = [/* 这里放入你的原始JSON数组 */];
const paths = extractAllPaths(yourJsonData);
// 输出成你要的每行一条路径的格式
console.log(paths.join('\n'));

为什么选reduce?

  • 高阶函数的核心优势:reduce本身就是专为累积处理数组元素设计的高阶函数,它接收回调函数和初始值,天然适合处理这种需要递归遍历树形结构、收集路径的场景。
  • 适配任意层级:不管你的节点嵌套多少层(N级),递归的reduce都会遍历到所有子节点,自动收集每一条完整的父子路径。
  • 代码简洁易维护:把路径拼接、递归处理子节点的逻辑整合在一个reduce回调里,代码紧凑且可读性强,后续要扩展功能(比如过滤特定节点)也很方便。

最终输出结果

运行上面的代码后,会得到完全符合你要求的格式:

Matae1
Matae2
Matae3 Child1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:36:32