如何不使用内置函数实现自定义.split方法?排查代码问题
自行实现.split方法的问题修复
你的代码存在的核心问题
- 数组被强制转为字符串:你用
arrSent += str[i]的方式拼接内容,数组和字符串相加时会自动转换为字符串类型,所以最终返回的是字符串而非数组。 - 未处理多字符分隔符:你的分隔符是
.(两个字符),但代码中仅用单个字符str[i]与分隔符比较,永远无法匹配到分隔符,自然不会触发拆分逻辑,只会把所有字符拼接成一个字符串。
修正后的实现代码
function split(str, splitter) { const result = []; let currentPart = ''; const splitterLength = splitter.length; for (let i = 0; i < str.length; i++) { // 检查当前位置开始的子串是否匹配分隔符 let match = true; for (let j = 0; j < splitterLength; j++) { if (str[i + j] !== splitter[j]) { match = false; break; } } if (match) { // 匹配到分隔符,将当前片段存入结果数组 result.push(currentPart); // 跳过分隔符的长度,避免重复处理 i += splitterLength - 1; // 重置当前片段 currentPart = ''; } else { // 未匹配到,将当前字符加入片段 currentPart += str[i]; } } // 加入最后一段未被分隔的内容 result.push(currentPart); return result; } // 测试示例 console.log(split('word wooord wooooooooord wooooooord. wooooooooord woooooord woooord wooooooooord', '. '));
代码逻辑说明
- 初始化
result数组存储拆分结果,currentPart用于临时拼接当前片段 - 通过内层循环检查多字符分隔符的匹配:从当前索引
i开始,逐一比对分隔符的每个字符 - 匹配到分隔符时,将
currentPart存入数组,跳过分隔符长度的索引,重置currentPart - 遍历结束后,将最后一段未被分隔的内容加入结果数组,确保所有内容都被处理
内容的提问来源于stack exchange,提问作者user526218
相关产品推荐
相关产品推荐

