如何简化生成指定层级路径数组的Node.js脚本?
简化Node.js层级路径生成脚本的几种方案
嘿,这段生成层级路径的代码确实可以简化不少!我给你几种更清爽的写法,不管是用原生JS还是保留Lodash都有方案:
方案1:纯原生JS(无需Lodash)
如果项目里没必要依赖Lodash,直接用原生API就能搞定,代码更轻量:
const inputString = "/h1/h2/h3/h4"; // 分割并过滤空字符串(去掉开头的/带来的空项) const parts = inputString.split('/').filter(Boolean); // 去掉最后一项,然后逐个生成前缀路径 const output = parts.slice(0, -1).map((_, idx) => `/${parts.slice(0, idx + 1).join('/')}`); console.log(output); // 输出: ['/h1', '/h1/h2', '/h1/h2/h3']
逻辑说明:
split('/').filter(Boolean)把路径拆分成数组并过滤掉开头空字符串parts.slice(0, -1)直接去掉最后一个元素(h4)map遍历过程中,每次取前idx+1个元素拼接成完整路径
方案2:保留Lodash的简化版
如果项目已经依赖Lodash,可以用它的工具函数让代码更简洁:
const _ = require('lodash'); const inputString = "/h1/h2/h3/h4"; const parts = _.filter(inputString.split('/'), Boolean); // _.initial 等价于 slice(0, -1),取除最后一项外的所有元素 const output = _.map(_.initial(parts), (_, idx) => `/${_.take(parts, idx + 1).join('/')}`); console.log(output); // 输出目标数组
这里用_.initial替代手动slice,_.take替代slice取前N项,更符合Lodash的函数式风格。
方案3:高效逐步构建(性能最优)
如果处理的路径很长,上面的方法每次slice会生成新数组,性能稍差。可以用逐步拼接的方式,只遍历一次:
const inputString = "/h1/h2/h3/h4"; const parts = inputString.split('/').filter(Boolean); const output = []; let currentPath = ''; // 只遍历到倒数第二个元素 for (const part of parts.slice(0, -1)) { currentPath += `/${part}`; output.push(currentPath); } console.log(output);
这种方法避免了多次数组切片操作,时间复杂度是O(n),适合处理大量层级的路径。
内容的提问来源于stack exchange,提问作者Sum Chan
相关产品推荐
相关产品推荐

