代码之家  ›  专栏  ›  技术社区  ›  PurplePanda

手动将JS中的大写字符串转换为小写字符串

  •  1
  • PurplePanda  · 技术社区  · 7 年前

    小写字母。诀窍是我不能使用 toLocaleLowerCase()

    以下是我到目前为止的情况。

    function charChange(char){
        for (var i=0; i<char.length; i++){
            var char2=charCodeAt(char[i])+32;
            var char3=String.fromCharCode(char2);
            if (char3 !== charCodeAt(97-122){
                alert("Please enter only letters in the function")
            }
        }
        return char;
    }
    
    4 回复  |  直到 7 年前
        1
  •  2
  •   MultiplyByZer0 Joke_Sense10    7 年前

    将字符串的大写字母转换为小写 手动 String.prototype.toLowerCase() ),您必须:

    1. 编写样板函数:

      function strLowerCase(str) {
          let newStr = "";
          // TODO
          return newStr;
      }
      
    2. 循环原始字符串的每个字符,并获取其代码点:

      function strLowerCase(str) {
          let newStr = "";
          for(let i = 0; i < str.length; i++) {
              let code = str.charCodeAt(i);
              // TODO
          } return newStr;
      }
      
    3. In ASCII ,字符之间带有代码点 65 90 (包括)为大写字母。

      function strLowerCase(str) {
          let newStr = "";
          for(let i = 0; i < str.length; i++) {
              let code = str.charCodeAt(i);
              if(code >= 65 && code <= 90) {
                  // TODO
              } // TODO
          } return newStr;
      }
      
    4. 如果字符是大写的,则在其代码点上添加32以使其小写(是的,这是ASCII的创建者精心设计的决定)。无论如何,请将新字符附加到新字符串。

      function strLowerCase(str) {
          let newStr = "";
          for(let i = 0; i < str.length; i++) {
              let code = str.charCodeAt(i);
              if(code >= 65 && code <= 90) {
                  code += 32;
              } newStr += String.fromCharCode(code);
          } return newStr;
      }
      
    5. strLowerCase("AAAAAAABBBBBBBCCCCCZZZZZZZZZaaaaaaaaaaa&$*(@&(*&*#@!");
      // "aaaaaaabbbbbbbccccczzzzzzzzzaaaaaaaaaaa&$*(@&(*&*#@!"
      
        2
  •  1
  •   Ivan Jeffrey Zhao    7 年前

    charCodeAt() 是在字符串上调用的方法,它不是函数。因此,将该方法应用于字符串,并将要转换的字符的位置作为参数。也作为 MultiplyByZer0 提到这个词 char list of reserved words .

    以下代码修复了该问题:

    function charChange(str) {
      var result = "";
    
      for (var i = 0; i < str.length; i++) {
    
        var code = str[i].charCodeAt(0);
        
        if(code >= 65 && code <= 90) {
        
          var letter = String.fromCharCode(code+32);
        
          result += letter // append the modified character
    
        
        } else {
    
          result += str[i]  // append the original character
          
        }
        
      }
    
       return result;
    }
    
    console.log(charChange('j#aMIE'));
        3
  •  1
  •   SVSchmidt    7 年前

    function charChange1 (str) {
      let result = '';
      const len = str.length;
      
      // go over each char in input string...
      for (let i = 0; i < len; i++) {
        const c = str[i];
        const charCode = c.charCodeAt(0);
    
        if (charCode < 65 || charCode > 90) {
          // if it is not a uppercase letter,
          // just append it to the output
          // (also catches special characters and numbers)
          result += c;
        } else {
          // else, transform to lowercase first
          result += String.fromCharCode(charCode - 65 + 97);
        }
      }
    
      return result;
    }
    
    function charChange2 (str) {
        // Array.prototype.slice.call(str) converts
        // an array-like (the string) into an actual array
        // then, map each entry using the same logic as above
        return Array.prototype.slice.call(str)
          .map(function (c) {
            const charCode = c.charCodeAt(0);
    
            if (charCode < 65 || charCode > 90) return c;
    
            return String.fromCharCode(charCode - 65 + 97);
          })
          // finally, join the array to a string
          .join('');
    }
    
    console.log(charChange1("AAAAsfasSGSGSGSG'jlj89345"));
    console.log(charChange2("AAAAsfasSGSGSGSG'jlj89345"));

    (在侧节点上,当然可以用声明为调用的常量替换幻数 'A'.charCodeAt(0) )

    烧焦 因为它在JavaScript中是一个保留字;我更喜欢 )

        4
  •  0
  •   Ivan Jeffrey Zhao    7 年前

    您可以使用 regex 要将字符串转换为小写:

    :%s/.*/\L&/