如何使用JavaScript将路径数组转换为嵌套结构对象
非递归实现方案
function pathsToObject(paths) { const result = {}; // 遍历所有路径 paths.forEach(path => { // 分割路径,过滤掉开头/产生的空片段 const segments = path.split('/').filter(seg => seg); let current = result; // 逐层处理路径片段 for (let i = 0; i < segments.length; i++) { const seg = segments[i]; // 最后一级片段赋值为null if (i === segments.length - 1) { current[seg] = null; } else { // 非最后一级不存在则创建空对象 current[seg] = current[seg] || {}; current = current[seg]; } } }); return result; } // 测试用例 const paths = [ "/path/to/first", "/path/to/second", "/path/to/third", "/path/from/first", "/path/from/second", "/users/bill", "/users/john" ]; console.log(pathsToObject(paths));
输出结果完全匹配要求的结构,末端节点值为null,重复路径片段会自动复用已有对象,不会重复创建。
可选递归实现方案
如果偏好更简洁的递归写法可以使用以下版本:
function pathsToObject(paths) { const result = {}; function addSegment(segments, current, index) { const seg = segments[index]; if (index === segments.length - 1) { current[seg] = null; return; } current[seg] = current[seg] || {}; addSegment(segments, current[seg], index + 1); } paths.forEach(path => { const segments = path.split('/').filter(seg => seg); addSegment(segments, result, 0); }); return result; }
两种方案均为纯原生JS实现,未依赖第三方工具或JSON.parse之类的快捷API。
内容的提问来源于stack exchange,提问作者Darren Gates
相关产品推荐
相关产品推荐

