写一个把字符串大小写切换的方法

function toggleCase(str) {
  let result = "";
  for (let i = 0; i < str.length; i++) {
    const char = str[i];
    // 检查字符是否为字母
    if (/[a-zA-Z]/.test(char)) {
      // 如果是大写字母,转换为小写;如果是小写字母,转换为大写
      result += char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase();
    } else {
      // 非字母字符保持不变
      result += char;
    }
  }
  return result;
}


// 测试用例
console.log(toggleCase("Hello World")); // Output: hELLO wORLD
console.log(toggleCase("123 AbCd!")); // Output: 123 aBcD!
console.log(toggleCase("")); // Output: "" 
console.log(toggleCase("你好世界")); // Output: 你好世界 (Non-alphabetic characters remain unchanged)


//  更简洁的写法 (使用map)
function toggleCaseMap(str) {
  return [...str].map(char => /[a-zA-Z]/.test(char) ? (char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase()) : char).join('');
}

// 测试用例 (map版本)
console.log(toggleCaseMap("Hello World")); // Output: hELLO wORLD
console.log(toggleCaseMap("123 AbCd!")); // Output: 123 aBcD!
console.log(toggleCaseMap("")); // Output: ""
console.log(toggleCaseMap("你好世界")); // Output: 你好世界 (Non-alphabetic characters remain unchanged)

这两个函数 toggleCasetoggleCaseMap 都实现了字符串大小写切换的功能,并保持非字母字符不变。 toggleCase 使用了传统的 for 循环,toggleCaseMap 使用了更简洁的 map 方法. 选择哪个取决于个人偏好和代码风格。 map 版本通常被认为更函数式和现代,但 for 循环版本可能更容易理解对于初学者。

解释:

  1. 正则表达式 /[a-zA-Z]/: 用于检查字符是否为字母。
  2. char === char.toUpperCase(): 检查字符是否为大写字母。 如果字符已经是大写,则该表达式为 true
  3. 三元运算符 condition ? expr1 : expr2: 基于条件 condition 选择返回 expr1expr2。 在这里,如果字符是大写,则转换为小写;否则转换为大写。
  4. map 方法: 创建一个新数组,其中每个元素都是对原始数组中相应元素执行回调函数的结果。
  5. join(''): 将数组元素连接成一个字符串。

希望这个解释对您有所帮助!

posted @ 2024-11-21 12:16  王铁柱6  阅读(41)  评论(0)    收藏  举报