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

TypeScript:实现嵌套对象数组全层级遍历并提取指定字段

递归处理树形结构节点转换

针对你的需求,你可以通过递归函数来遍历所有层级的节点,完成结构转换。以下是两种场景的实现方案:

方案1:保留原树形层级结构

如果需要保留节点的层级关系,转换后仍为树形结构:

首先定义类型(TypeScript):

// 原始节点类型
interface OriginalTreeNode {
  id: number;
  name: string;
  children: OriginalTreeNode[];
}

// 转换后的目标节点类型
interface TransformedTreeNode {
  value: number;
  name: string;
  selected: boolean;
  children: TransformedTreeNode[];
}

实现递归转换函数:

function transformTreeNodes(nodes: OriginalTreeNode[]): TransformedTreeNode[] {
  return nodes.map(node => {
    // 转换当前节点的结构
    const transformed = {
      value: node.id,
      name: node.name,
      selected: false,
      children: [] as TransformedTreeNode[]
    };
    // 递归处理子节点(如果存在)
    if (node.children.length > 0) {
      transformed.children = transformTreeNodes(node.children);
    }
    return transformed;
  });
}

调用方式:

// 处理tree的所有子节点层级
const transformedTree = transformTreeNodes(tree.children);

方案2:平铺所有节点为一维数组

如果不需要保留层级,只需要把所有节点提取到一个一维数组中:

function flattenTransformNodes(nodes: OriginalTreeNode[]): TransformedTreeNode[] {
  let result: TransformedTreeNode[] = [];
  
  nodes.forEach(node => {
    // 添加当前节点
    result.push({
      value: node.id,
      name: node.name,
      selected: false
    });
    // 递归处理子节点并合并到结果
    if (node.children.length > 0) {
      result = result.concat(flattenTransformNodes(node.children));
    }
  });
  
  return result;
}

调用方式:

const flattenedNodes = flattenTransformNodes(tree.children);

核心逻辑是:每次处理一个节点时,先完成当前节点的结构转换,再检查是否存在子节点,若存在则递归调用同一个函数处理子节点,实现全层级遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:45:46