如何实现多单词字符串的字母大小写交替转换(单词首字母大写)
多单词字符串大小写交替转换实现方案
需求:对包含多个单词的字符串执行大小写交替转换,要求每个单词以大写字母开头。示例:输入 "hello world",输出 "HeLlO WoRlD"。
当前代码问题
你提供的代码存在两个核心问题:
- 将所有单词合并为单个字符串处理,导致大小写交替逻辑跨单词生效,不符合“每个单词单独交替”的要求;
- 手动通过索引插入空格的方式仅适配两个单词且单个空格的场景,无法处理多单词、多连续空格的情况。
你的代码如下:
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
相关产品推荐
相关产品推荐

