JavaScript字符串替换故障排查:用指定字符替换点分隔符
问题描述
- 需求:第一行输入字符组合
d,第二行输入以点分隔的单词序列,需将这些单词以d作为分隔符输出。 - 示例:
- 输入
d= /| - 输入单词序列:
dej.fow.orj.jkk.fgo.pwk.pkp.lde.efe - 预期输出:
dej/|\fow/|\orj/|\jkk/|\fgo/|\pwk/|\pkp/|\lde/|\efe
- 输入
- 问题:以下JavaScript代码无法正常运行,请求排查修复:
let d=prompt(); let b=prompt(); let arr=b.split(''); for(let i in arr) { if(i.indexOf('.') !== -1){ arr = i.replace(i.indexOf('.'), d) } } arr = arr.join() console.log(arr)
代码修复方案
原代码问题分析
- 遍历对象错误:用
for...in遍历数组时,i是数组的索引(字符串类型的数字,比如"0""1"),不是数组中的字符,所以i.indexOf('.')永远返回-1,根本不会进入替换逻辑。 - 数组被错误覆盖:就算进入替换逻辑,
arr = i.replace(...)会直接把数组替换成一个字符串,后续循环完全失效。 - join方法无参数:最后
arr.join()默认用逗号连接元素,不符合输出要求。
修复后的代码(最优解)
const d = prompt(); const wordStr = prompt(); const result = wordStr.split('.').join(d); console.log(result);
代码解释
split('.'):直接把输入的单词序列按点分割成单词数组,比如输入dej.fow.orj会变成['dej', 'fow', 'orj']。join(d):用指定的分隔符d把单词数组重新拼接成字符串,正好满足需求。
若保留遍历字符的思路(不推荐,效率较低)
如果一定要通过遍历字符实现,代码可修改为:
const d = prompt(); const wordStr = prompt(); const arr = wordStr.split(''); for (let i = 0; i < arr.length; i++) { if (arr[i] === '.') { arr[i] = d; } } const result = arr.join(''); console.log(result);
内容的提问来源于stack exchange,提问作者Mickel Gor
相关产品推荐
相关产品推荐

