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

如何将特殊编号格式的字符串数组转换为嵌套对象?

实现方案

要把给定的数组转换成目标嵌套对象,核心是先按层级排序保证父节点优先处理,再通过映射表快速关联父节点与子节点,具体实现如下:

代码实现

const myArray = ["1", "1.2.3.4", "1.2.3", "1.2", "2", "2.1"];

function buildNestedStructure(arr) {
  // 按id的层级深度从小到大排序,确保父节点先被处理
  const sortedArr = [...arr].sort((a, b) => {
    const depthA = a.split('.').length;
    const depthB = b.split('.').length;
    return depthA - depthB;
  });

  const nodeMap = new Map();
  const result = {};

  sortedArr.forEach(id => {
    const node = { id, child: null };
    nodeMap.set(id, node);

    const parts = id.split('.');
    if (parts.length === 1) {
      // 根节点直接加入结果对象
      result[id] = node;
    } else {
      // 拼接得到父节点的id
      const parentId = parts.slice(0, -1).join('.');
      const parentNode = nodeMap.get(parentId);
      // 将父节点的child指向当前节点
      if (parentNode) parentNode.child = node;
    }
  });

  return result;
}

// 执行函数并输出结果
console.log(buildNestedStructure(myArray));

逻辑说明

  • 排序处理:把数组按id的层级深度(点的数量)从小到大排序,确保像"1"、"2"这类根节点先被创建,后续子节点能找到对应的父节点。
  • 节点映射表:用Map存储每个id对应的节点对象,避免重复创建,同时能快速查找父节点。
  • 层级关联:每个节点创建后,若为非根节点,就通过分割id拼接出父id,找到父节点并将父节点的child指向当前节点,最终形成线性嵌套结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:55:24