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

如何从带层级标注的扁平化映射生成嵌套数组?

实现思路与代码方案

这个需求本质是把带层级分隔符的扁平键值对转换成嵌套数组,核心是解析每个键的层级路径,然后把值映射到对应的嵌套位置。我用JavaScript/TypeScript来实现,思路很清晰:

核心思路

  1. 解析层级路径:把每个键(比如"3-1-0")按"-"分割成数字数组([3,1,0]),这个数组就是值在嵌套数组中的位置路径。
  2. 逐层构建嵌套结构:从根数组开始,沿着路径找到对应的父容器;如果中间某层不存在,就创建一个空数组作为容器。
  3. 赋值到目标位置:把值放到路径的最后一个索引位置,完成层级映射。

JavaScript 实现代码

function flattenToNested(flatObj) {
  const root = [];

  Object.entries(flatObj).forEach(([key, value]) => {
    // 拆分键为层级路径数组
    const path = key.split('-').map(Number);
    let current = root;

    // 遍历路径的前n-1个节点,确保父容器存在
    for (let i = 0; i < path.length - 1; i++) {
      const index = path[i];
      if (!Array.isArray(current[index])) {
        current[index] = [];
      }
      current = current[index];
    }

    // 将值放入最后一个路径节点对应的位置
    const lastIndex = path[path.length - 1];
    current[lastIndex] = value;
  });

  return root;
}

// 测试你的示例数据
const flatData = { 
  '0': '0', 
  '1': '1', 
  '2-0': '2-0', 
  '2-1': '2-1', 
  '3-0': '3-0', 
  '3-1-0': '3-1-0', 
  '3-1-1': '3-1-1', 
  '3-2': '3-2' 
};
console.log(flattenToNested(flatData));
// 输出:[ '0', '1', [ '2-0', '2-1' ], [ '3-0', [ '3-1-0', '3-1-1' ], '3-2' ] ]

TypeScript 类型安全版本

如果需要类型约束,可以加上泛型和嵌套数组类型定义:

// 定义嵌套数组类型
type NestedArray<T> = T | NestedArray<T>[];

function flattenToNested<T>(flatObj: Record<string, T>): NestedArray<T>[] {
  const root: NestedArray<T>[] = [];

  Object.entries(flatObj).forEach(([key, value]) => {
    const path = key.split('-').map(Number);
    let current: NestedArray<T>[] = root;

    for (let i = 0; i < path.length - 1; i++) {
      const index = path[i];
      if (!Array.isArray(current[index])) {
        current[index] = [];
      }
      // 类型断言确保当前容器是数组
      current = current[index] as NestedArray<T>[];
    }

    const lastIndex = path[path.length - 1];
    current[lastIndex] = value;
  });

  return root;
}

额外说明

  • 这个方案不要求键的遍历顺序,因为我们直接通过索引赋值,不管先处理哪个键,最终都会放到正确的位置。
  • 如果遇到非数字的层级键(比如"a-b"),只需要调整split后的类型转换逻辑即可,核心思路不变。
  • 支持任意深度的嵌套,只要键的层级格式符合x-y-z...的结构就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:25:29