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

如何实现多单词字符串的字母大小写交替转换(单词首字母大写)

多单词字符串大小写交替转换实现方案

需求:对包含多个单词的字符串执行大小写交替转换,要求每个单词以大写字母开头。示例:输入 "hello world",输出 "HeLlO WoRlD"。

当前代码问题

你提供的代码存在两个核心问题:

  1. 将所有单词合并为单个字符串处理,导致大小写交替逻辑跨单词生效,不符合“每个单词单独交替”的要求;
  2. 手动通过索引插入空格的方式仅适配两个单词且单个空格的场景,无法处理多单词、多连续空格的情况。

你的代码如下:

function alternateCase(str) { 
  if (str.length === 0) { 
    return "" 
  } 
  const arrCapitalised = [] 
  const splitStr = str.split("") 
  const indexSpace = splitStr.indexOf(" ") 
  const joinStr = str.split(" ").join("") 
  for (let i = 0; i < joinStr.length; i++) { 
    if (i % 2 === 0) { 
      arrCapitalised.push(joinStr[i].toUpperCase()) 
    } else { 
      arrCapitalised.push(joinStr[i]) 
    } 
  } 
  console.log(arrCapitalised, "PREVIOUS ARRAY") 
  const finalArr = arrCapitalised.splice(indexSpace, 0, " ") 
  console.log(finalArr, "FINAL ARRAY") 
  return arrCapitalised.join("").toString()
}

修正后的实现

正确思路是按单词拆分后逐个处理,再合并结果,这样既能保证每个单词独立执行大小写交替,也能兼容多单词、多空格的场景:

function alternateCase(str) {
  // 按一个或多个空格拆分单词,处理连续空格的情况
  return str.split(/\s+/).map(word => {
    // 对单个单词的每个字符按索引交替大小写
    return word.split('').map((char, idx) => 
      idx % 2 === 0 ? char.toUpperCase() : char.toLowerCase()
    ).join('');
  }).join(' ');
}

// 测试示例
console.log(alternateCase("hello world")); // 输出 "HeLlO WoRlD"
console.log(alternateCase("this is a test")); // 输出 "ThIs Is A TeSt"
console.log(alternateCase("  multiple   spaces  ")); // 输出 "MuLtIpLe SpAcEs"

代码说明

  • split(/\s+/):使用正则匹配任意数量的空格,将字符串拆分为单词数组,自动忽略首尾空格和连续空格;
  • 每个单词单独处理:将单词拆分为字符数组,索引为偶数的字符转大写(包括首字母),奇数转小写,完美匹配需求;
  • 最后用单个空格将处理后的单词拼接为最终字符串。

内容的提问来源于stack exchange,提问作者IAM53382

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:05:23