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

TypeScript如何通过动态深度索引数组访问嵌套数组内的目标对象

实现方案

你可以通过逐层迭代position数组的方式直接定位到目标对象,无需遍历整棵树,也不需要使用eval,同时保证TypeScript类型安全。

代码实现

// 先对齐你的接口定义
export interface Folder {
  name: string;
  type?: string;
  depth?: number;
  position: number[];
  children: Folder[];
}

/**
 * 通过position数组定位目标文件夹对象
 * @param rootFolders 根层级的文件夹数组
 * @param position 目标对象的position数组
 * @returns 匹配到的文件夹对象,不存在则返回undefined
 */
function getFolderByPosition(rootFolders: Folder[], position: number[]): Folder | undefined {
  if (!position.length) return undefined;
  // 用reduce逐层向下查找,仅迭代position的长度次,无需遍历全树
  return position.reduce((currentNode, currentIndex, arrayIndex) => {
    // 第一层取根数组的对应索引
    if (arrayIndex === 0) return rootFolders[currentIndex];
    // 后续层级取上一层节点的children对应索引
    return currentNode?.children?.[currentIndex];
  }, undefined as Folder | undefined);
}

使用示例

以你给出的Folder4(position为[0,0,1])为例,调用方式如下:

// 等效于 this.folder[0].children[0].children[1]
const folder4 = getFolderByPosition(this.folder, [0, 0, 1]);

// 可直接修改返回的对象(返回的是原对象的引用)
if (folder4) {
  folder4.name = "重命名后的文件夹";
}

方案优势

  • 无安全风险,完全规避eval带来的代码注入隐患
  • 性能最优,时间复杂度仅为O(n)(n为position数组的长度),不需要遍历整个文件夹树
  • 类型安全,TypeScript可正常推导返回值类型,不会出现类型逃逸
  • 容错性高,任意层级索引不存在时会直接返回undefined,不会抛出运行时错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:24:03