如何拆分连字符分隔字符串并生成由累积前缀组成的数组
现有实现合理性评估
你写的代码是完全合理的:
- 逻辑清晰易懂,每一步操作都很明确
- 时间复杂度为O(n)(n为分隔后的元素数量),空间复杂度为O(n),属于最优的时间复杂度等级,即使处理很长的字符串也不会有性能问题
- 没有多余冗余操作,常规业务场景下可以直接正常使用
更简洁的实现方式
下面提供两种常见的简化写法,你可以根据场景选择:
1. reduce 实现(性能和原实现一致)
和你原有逻辑完全等价,只是用数组reduce方法简化了临时变量的声明,代码更简洁:
const str = '1-2-3'; const arr = str.split('-').reduce((result, current, idx) => { result.push(idx === 0 ? current : `${result[idx-1]}-${current}`); return result; }, []);
2. Array.from 实现(可读性更强,适合短字符串场景)
代码更短可读性更高,缺点是每次拼接都会做一次slice和join,时间复杂度为O(n²),仅适合长度不大的常规业务场景:
const str = '1-2-3'; const parts = str.split('-'); const arr = Array.from({length: parts.length}, (_, i) => parts.slice(0, i+1).join('-'));
边界情况补充
如果需要兼容空字符串输入的场景,可以提前加一层判断,避免输出['']这类不符合预期的结果:
const getPrefixArr = (str) => { if (!str) return []; // 写入你选择的实现逻辑 }
内容的提问来源于stack exchange,提问作者Mitch
相关产品推荐
相关产品推荐

