使用JavaScript的str.replace()方法替换字符时输出错误是什么原因?
问题解答
错误原因
你代码的核心问题是误用了String.replace()方法的特性:当该方法的第一个入参为字符串时,只会替换整个字符串中第一个匹配到的该字符,而非替换你指定索引位置的字符。
你的测试用例输入字符串为Baddy,执行替换逻辑时你本意是替换索引3位置的d,但string.replace('d', pre_val)会优先匹配到第一个出现的d(也就是你要保留的索引2位置的目标字符),将该位置的d替换为a,最终输出就变成了你得到的Baady。
修复方案
JavaScript中字符串是不可变类型,无法直接按索引修改单个字符,建议先将字符串转为数组操作,修改完成后再转回字符串即可,修复后的代码如下:
function replaceChar(string, idx) { // 转为数组支持按索引修改值 const strArr = string.split(''); const targetChar = strArr[idx]; const preVal = strArr[idx - 1]; const postVal = strArr[idx + 1]; const matchIndexes = []; // 收集所有除指定索引外的匹配字符位置 for (let i = 0; i < strArr.length; i++) { if (i === idx) continue; if (strArr[i] === targetChar) { matchIndexes.push(i); } } // 按索引交替替换,不会误改其他位置 for (let i = 0; i < matchIndexes.length; i++) { const currentPos = matchIndexes[i]; strArr[currentPos] = i % 2 === 0 ? preVal : postVal; } return strArr.join(''); }
调用console.log(replaceChar('Baddy',2)),输出结果为Baday,符合预期。
内容的提问来源于stack exchange,提问作者Swayam Shah
相关产品推荐
相关产品推荐

