javascript - 字符串中的替代大写
问题描述
我想创建一个交替字母大写的函数。例如,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"
如何修复我的功能?
解决方案
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 );
推荐阅读
- c++ - Qt C++:无法为不同线程中的父级创建子级
- json - Vue 在 v-for 中显示数组的两个对象
- linux - ssh 以 sudo 运行时不执行远程命令
- elasticsearch - Elasticsearch 将节点添加到集群
- linux - 仅当所有文件中都存在字符串时,如何在多个文件上 grep 字符串?
- java - 如何在 Java 中返回布尔值
- flutter - 条带支付完成后 Flutter iOS 关闭 SFSafariViewController
- flutter - W/IInputConnectionWrapper(1768):非活动 InputConnection Flutter 上的 getSelectedText
- compiler-construction - 工业游戏 CPU 架构最简单的编译器
- sequence - 随机增加的序列 - Wolfram Mathematica