Vanilla JS字符串处理求助:字符替换、指定位置大写及ASCII转换
问题修复与代码优化
先看修正后的完整代码,可直接输出你预期的结果:
// 1. 每隔一个字符替换为!(示例:Pokemon → P!k!m!n) function replaceEveryOtherChar(str) { return str.split('').map((char, index) => { // 对应示例替换奇数索引(从0开始计数)的字符 return index % 2 === 1 ? '!' : char; }).join(''); } // 2. 将第6个字符转为大写(示例:Pokemon → pokemOn) function capitalize6thChar(str) { if (str.length < 6) return str; // 兼容字符串长度不足的情况 // 字符串索引从0开始,第6个字符对应索引5 return str.toLowerCase().slice(0, 5) + str.charAt(5).toUpperCase() + str.slice(6); } // 3. 返回字符串所有字符的ASCII值数组 function getASCIIArray(str) { return str.split('').map(char => char.charCodeAt(0)); } // 测试执行 const word = "Pokemon"; console.log(word); // Pokemon console.log(replaceEveryOtherChar(word)); // P!k!m!n const reverse = word.split('').reverse().join('').toLowerCase(); console.log(reverse); // nomekop console.log(capitalize6thChar(word)); // pokemOn console.log(getASCIIArray(word)); // [80, 111, 107, 101, 109, 111, 110]
逐个问题分析与修复
1. 每隔一个字符替换为!的问题
你原代码的错误点:
- 循环条件用了赋值操作
i=string.length,应该改为判断i < string.length - 字符串是不可变类型,无法直接通过
string.charAt(i) = '!'修改字符 - 函数参数与调用不匹配:定义的
replaceAt仅接受一个参数,但调用时传了两个值 - 逻辑判断错误:
i%2=0是赋值而非判断,且示例要求替换的是奇数索引的字符,应改为i%2 === 1
修复思路:将字符串转为数组(数组可变),用map遍历字符与索引,按规则替换后再转回字符串。
2. 第6个字符转为大写的问题
你原代码的错误点:
- 函数逻辑完全偏离:
capitalizeFirstLetter是首字母大写,和第6个字符无关 - 忽略字符串索引从0开始的规则:第6个字符对应索引是5,不是6
- 未处理示例中“前面字符转小写”的要求
修复思路:先将整个字符串转小写,再截取前5个字符,拼接第6个字符的大写形式,最后拼接剩余部分。
3. 返回ASCII值数组的问题
你原代码的错误点:
- 循环内直接
return,导致函数仅返回第一个字符的ASCII值就终止 - 未收集所有字符的ASCII值到数组中
修复思路:用split('')将字符串转为字符数组,通过map遍历每个字符,返回对应的ASCII值,最终得到完整数组。
内容的提问来源于stack exchange,提问作者Vermillion Orange
相关产品推荐
相关产品推荐

