首页 > 解决方案 > 字符串中的替代大写

问题描述

我想创建一个交替字母大写的函数。例如,Hello World将成为HeLlO wOrLd. 字符串的第一个字母必须始终大写。

这是我写的代码:

function alternatingCaps(str) {
    let alternate = str.charAt(0).toUpperCase();
    for(let i = 1; i < str.length; i++) {
        let previousChar = str.charAt(i - 1);
        if(previousChar === previousChar.toUpperCase())
            alternate += str.charAt(i).toLowerCase();
        else if(previousChar === previousChar.toLowerCase())
            alternate += str.charAt(i).toUpperCase();
    }
    return alternate;
}

alternate用提供的字符串的大写第一个字符声明了变量。然后我循环遍历字符串的其余部分并检查当前迭代之前的字符是大写还是小写;无论是哪一个,当前的字母都会变成相反的。

然而,这并没有预期的结果。以下是一些测试及其相应的结果:

console.log(alternatingCaps('hello world'));
// Output: "HELLO wORLD"

console.log(alternatingCaps('jAvaScrIPT ruLEZ'));
// Output: "JAvAScRIpt rULez"

如何修复我的功能?

标签: javascriptstringfunctionfor-loop

解决方案


let s = 'hello there this is a test';
s = s.split('').map( (letter,i) => (i % 2) == 0 ?  letter.toUpperCase() : letter.toLowerCase() ).join('')
console.log( s );

更新:如果您想忽略但保留空格,那么这里是另一种解决方案,尽管有点麻烦。它不只是忽略空格,它只对匹配正则表达式的字母进行 操作。

let s = 'hello there this is a test';
let ul = false;
s = s.split('').map(letter => letter.match(/[a-zA-Z]/) != null ? (ul = ! ul, ul ? letter.toUpperCase() : letter.toLowerCase()) : letter).join('');
console.log( s );


推荐阅读