1.常规 for 循环
这种方法使用传统的 for
循环遍历字符串中的每个字符,并根据其大小写状态进行相应的转换。虽然代码较为冗长,但它直接展示了每一步操作。
var str = 'hello JAVASCRIPT';
function toggleCase(str) {
let c = ""; // 初始化一个空字符串用于存储转换后的字符
for (let i = 0; i < str.length; i++) { // 遍历字符串中的每个字符
var ch = str.charAt(i); // 获取当前字符
if (ch >= 'a' && ch <= 'z') { // 如果是小写字母,则转换为大写
c += ch.toUpperCase();
} else if (ch >= 'A' && ch <= 'Z') { // 如果是大写字母,则转换为小写
c += ch.toLowerCase();
} else { // 如果不是字母(如空格或符号),则保持不变
c += ch;
}
}
return c; // 返回转换后的字符串
}
console.log(toggleCase(str)); // 输出: "HELLO javascript"
2.Array.from 方法
利用 Array.from()
将字符串转换为数组,然后使用 map()
对每个字符进行转换,最后用 join('')
将数组重新组合成字符串。
function toggleCase(str) {
return Array.from(str).map(ch => {
if (ch >= 'a' && ch <= 'z') { // 如果是小写字母,则转换为大写
return ch.toUpperCase();
} else if (ch >= 'A' && ch <= 'Z') { // 如果是大写字母,则转换为小写
return ch.toLowerCase();
}
return ch; // 如果不是字母,则保持不变
}).join(''); // 将数组元素连接成一个字符串
}
// 使用示例
var str = 'hello JAVASCRIPT';
console.log(toggleCase(str)); // 输出: "HELLO javascript"
3.使用 map
方法
通过扩展运算符 [...]
将字符串转换为数组,然后使用 map()
方法和三元运算符简化条件判断。这种方式不仅代码简洁,而且可读性高。
function toggleCase(str) {
return [...str].map(ch =>
ch === ch.toLowerCase() ? ch.toUpperCase() : ch.toLowerCase()
).join('');
}
// 使用示例
var str = 'hello JAVASCRIPT';
console.log(toggleCase(str)); // 输出: "HELLO javascript"
注释:
[...str]
:使用扩展运算符将字符串转换为字符数组。map()
:对每个字符应用转换规则。ch === ch.toLowerCase()
:检查字符是否为小写,如果是,则转换为大写;否则,转换为小写。join('')
:将转换后的字符数组重新组合成字符串。
4.简洁版 join
方法
这是最简洁的版本,直接在箭头函数中完成所有操作。结合了扩展运算符、map()
和 join()
的优点,代码一行内完成。
const toggleCase = str => [...str].map(ch => ch === ch.toLowerCase() ? ch.toUpperCase() : ch.toLowerCase()).join('');
// 使用示例
var str = 'hello JAVASCRIPT';
console.log(toggleCase(str)); // 输出: "HELLO javascript"
注释:
const toggleCase = str => ...
:定义一个名为toggleCase
的箭头函数。- 其余部分与“使用 map 方法”相同。
5.总结
以上四种方法都实现了相同的逻辑——将字符串中的小写字母转换为大写,大写字母转换为小写。选择哪种方法取决于个人具体需求:
- 代码的可读性和易维护性,推荐使用
Array.from
或map
方法。 - 代码极致的简洁,可以考虑使用箭头函数和扩展运算符的一行解决方案。
- 方便理解,常规
for
循环是一个很好的起点,因为它明确地展示了每一步的操作。