如何将特殊编号格式的字符串数组转换为嵌套对象?
实现方案
要把给定的数组转换成目标嵌套对象,核心是先按层级排序保证父节点优先处理,再通过映射表快速关联父节点与子节点,具体实现如下:
代码实现
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
相关产品推荐
相关产品推荐

