字符串大小写反转功能实现问题求助
字符串大小写反转函数无法正常运行的问题排查与修复
你的代码思路没问题,但核心问题出在forEach的使用方式上:forEach遍历数组时,调用functionX只会返回转换后的字符,但不会自动更新原数组letters里的元素——相当于你只跑了转换逻辑,没把结果存回去,最后数组还是原样,自然输出和输入一致。
问题分析
functionX本身的大小写反转逻辑是对的,单个字符传入能正确返回反转后的结果;- 但
letters.forEach(functionX)这一步,只是对每个字符执行了functionX,却没有将返回的转换后字符赋值回数组的对应位置,原数组letters完全没被修改。
修复方案
有两种简单的修复方式,任选其一即可:
方案1:用map代替forEach(推荐)
map方法会遍历数组并返回一个新数组,每个元素都是原元素经过处理后的结果,完美适配这种批量转换元素的场景:
const functionX = X => X === X.toLowerCase() ? X.toUpperCase() : X.toLowerCase(); function reverseCase(string) { const letters = string.split(''); // 用map生成转换后的新数组 const reversedLetters = letters.map(functionX); return reversedLetters.join(''); } console.log(reverseCase('Happy Birthday!')); // 输出:hAPPY bIRTHDAY!
方案2:修改forEach的使用逻辑(手动赋值)
如果一定要用forEach,需要在遍历的时候手动把转换后的字符赋值回数组的对应索引位置:
const functionX = X => X === X.toLowerCase() ? X.toUpperCase() : X.toLowerCase(); function reverseCase(string) { const letters = string.split(''); letters.forEach((char, index) => { // 将转换后的字符存回数组对应位置 letters[index] = functionX(char); }); return letters.join(''); } console.log(reverseCase('Happy Birthday!')); // 输出:hAPPY bIRTHDAY!
补充说明:你的functionX对非字母字符(比如示例里的!)处理是正确的,因为非字母的大小写转换结果都是自身,反转后不会出现问题。
内容的提问来源于stack exchange,提问作者Rookie Junior
相关产品推荐
相关产品推荐

