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

时间:2017-08-05 20:32:53

标签: javascript char uppercase lowercase

尝试编写一个返回转换为的调用字符串值的函数 小写。诀窍是我不能使用toLocaleLowerCase()

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

var imageurl;
      $.get('http://www.airport-data.com/api/ac_thumb.json?m=+value.hex', function (response) { 
        imageurl = response;
        if (imageurl == ""){
            $( "#images" ).attr('src', "imageerror.jpg");
        }
        else {
            $( "#images" ).attr('src', imageurl);

        }

      }); 

4 个答案:

答案 0 :(得分:2)

要将字符串的大写字母转换为小写手动(如果您不是手动执行,则只需使用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,代码点介于6590(含)之间的字符为大写字母。

    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&$*(@&(*&*#@!"
    

答案 1 :(得分:1)

charCodeAt()是一个在String上调用的方法,它不是一个函数。因此,您将该方法应用于字符串,并将要转换的字符的位置作为参数。同样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'));

答案 2 :(得分:1)

这是我能想到的两个最优雅的解决方案(目前)。请参阅代码中的注释,并毫不犹豫地询问是否有任何不清楚的地方。

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)的调用的常量替换幻数?)

(第二个侧节点:不要使用 char ,因为它是JavaScript中的保留字;我更喜欢 c

答案 3 :(得分:0)

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

:%s/.*/\L&/