You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字符串大小写反转功能实现问题求助

字符串大小写反转函数无法正常运行的问题排查与修复

你的代码思路没问题,但核心问题出在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:35:41