如何手动转换为大写?(Javascript)

时间:2017-08-13 23:11:30

标签: javascript function

我正在尝试编写一个函数,该函数将字符串值返回大写,而没有使用toUpperCase()内置函数 例子(“你好”);返回“你好”

没有这个:

var x="hello"
var y=x.toUpperCase();

9 个答案:

答案 0 :(得分:5)

一种选择是对字符进行硬编码。使用.indexOf()匹配对象的相邻属性值处的字符。

const map = {
  uppercase: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
  lowercase: "abcdefghijklmnopqrstuvwxyz"
};

var x = "hello"
var y = x.replace(/(.)/g, match => map.uppercase[map.lowercase.indexOf(match)]);

console.log(y);

答案 1 :(得分:4)

这是一个功能(非常老派和手动):

  • 循环播放字符串
  • 如果遇到小写字符,换句话说,如果你的ASCII码在[97,122]范围内,这是小写字母字符的范围,则从它的ASCII码中减去32,因为ASCII中的小写字母alpha-char和大写形式之间的差异是32,然后将其添加到新字符串中。
  • 否则,按原样添加字符。


正如@georg,德语(德语字母包括重音字母)指出的那样,我添加了一个更新以包含它们。
它们的范围是[224,255],每个和它的大写形式之间的差异也是32,因此,如果出现以下情况则不需要其他:

function myToUpperCase(str) {
  var newStr = '';
  for (var i=0;i<str.length;i++) {
    var thisCharCode = str[i].charCodeAt(0);
    if ((thisCharCode>=97 && thisCharCode<=122)||(thisCharCode>=224 && thisCharCode<=255)) {
    	newStr += String.fromCharCode(thisCharCode - 32);
    } else {
    	newStr += str[i];
    }
  }
  return newStr;
}
console.log(myToUpperCase('helLo woRld!')); // => HELLO WORLD!
console.log(myToUpperCase('üñïçødê')); // => ÜÑÏÇØDÊ

答案 2 :(得分:3)

您可以使用x.charCodeAt(0) - 32将字符转换为小写字母,使用String.fromCharCode将ascii代码转换为字符。使用split()获取单个字符,map()访问和转换每个字符,join()形成一个字符串。这样的事情似乎有效:

function capitalize(str){
  var arr = str.split("");
  arr = arr.map(x => {
     var charCode = x.charCodeAt(0);
     return charCode>=97 && charCode<=122 ? String.fromCharCode(charCode - 32) : x;
   });
  return arr.join("");
}

console.log(capitalize("hello!"));

答案 3 :(得分:1)

  1. 创建模板数组$lower = ["a", "b"...] , $upper = ["A", "B"]
  2. 拆分示例字example.split("")
  3. 通过所有字母(示例)迭代并从$ lower
  4. 获取字母的索引
  5. 使用索引从$ upper
  6. 获取字母
  7. 加入大写字母
  8. 这是我尝试做像你这样的事情的原始程序。但请记住,你能做的最糟糕的事情就是再次“发明”一个轮子,所以只需使用内置功能(它更快)

答案 4 :(得分:0)

我认为toUpperCase已针对各种字符集进行了优化,但如果您想编写自己的替换字符,则可以使用.charCodeAt,例如

function myToUpperCase(str) {
 return str.split("").map(function (chr) {
   var chrCode = chr.charCodeAt(0);
   // Return non a-z chars as they are
   if ( chrCode > 122 || chrCode < 97)
     return chr;
   return String.fromCharCode(chrCode - 32);
 }).join("");
}

我在这做什么:

  • 将字符串拆分为字符数组
  • 按原样返回无效输入
  • 从每个字母中获取字符代码
  • 从小写到大写字符的差异是32
  • 将字符加入新字符串

我的2美分:)

答案 5 :(得分:0)

这是一个坏主意

始终尽可能使用内置方法。当其他人已经可靠地制造和测试它多年时,没有理由重新发明轮子。

然而...

您可以更改某些字母的ASCII代码来执行此操作。计算机上的所有字符都由数字代码表示,因此通过转换为此代码(ASCII或Unicode),执行数字操作,然后转换回来,我们可以转换字母大小写。

您可以找到所有ASCII代码here的表格。

&#13;
&#13;
function newToUpperCase(text) {
  var result = ""; //Store the new text
  for (var i=0;i<text.length;i++) { //Loop through all characters in the string
    var code = text[i].charCodeAt(0) //Get the ASCII code of the current character
    if (code>=97&&code<=122) { //If it is a lower-case letter (code is between 97 and 122 inclusive) 
      code -= 32; //Subtract 32 from the code to make it the code for an uppercase letter
    }
    result += String.fromCharCode(code); //Concatenate the character code transformed to a string to the result
  }
  return result; //Return the result
}

document.write(newToUpperCase("This is a test!")) //Test the function
&#13;
&#13;
&#13;

答案 6 :(得分:0)

您可以依赖ANSI代码,小写字符范围为65-90,大写字符为97-122。 适用于:UPPERCASE = LOWERCASE - 32;

<input type="text" id="my_text_source" placeholder="MM/dd/YYYY" />
<input type="text" id="my_text_result" placeholder="MM/dd/YYYY" />
<input type="button" id="my_button" value="To Uppercase">

<script>
    var myButton = document.querySelector('#my_button');

    myButton.onclick = function (evt) {
        var myTextSource = document.querySelector('#my_text_source');
        var source = myTextSource.value;
        var result = "";
        for (var i=0; i<source.length; i++) {
            // convert lower case characters to uppercase.
            if (source.charCodeAt(i) >= 97 && source.charCodeAt(i) <= 122) {
                result += String.fromCharCode(source.charCodeAt(i) - 32);
            }
            // otherwise, leave as is.
            else {
                result += source[i];
            }
        }

        var myTextResult = document.querySelector('#my_text_result');
        myTextResult.value = result;
    };
</script>

答案 7 :(得分:0)

var upperize = 
    str => str.replace( /[a-z]/g, c=>String.fromCharCode(c.charCodeAt(0)-32));

console.log( upperize( "hello Folks !@# 42") );

使用代码进行多次回复后,我将使用正则表达式呈现另一个版本。因为该方法调用三种不同的stringString方法,所以它的效率低于内置的.toUpperCase字符串方法。为内置方法编写替换不太可能提供改进。

作为练习,需要进行哪些更改才能使上面的代码转换为大写&#39; A&#39;通过&#39; Z&#39;小写?

答案 8 :(得分:-3)

您始终可以使用巨型切换声明。

即使这样做完全不合理。

function toUpperCaseSwitch(value){
 switch(value) {
case 'a':
    return 'A'
    break;
case 'b':
    return 'B'
    break;
case 'c':
    return 'C'
    break;
case 'd':
    return 'D'
    break;
case 'e':
    return 'E'
    break;
case 'f':
    return 'F'
    break;
case 'g':
    return 'G'
    break;
case 'h':
    return 'H'
    break;
case 'i':
    return 'I'
    break;
case 'j':
    return 'J'
    break;
case 'k':
    return 'K'
    break;
case 'l':
    return 'L'
    break;
case 'm':
    return 'M'
    break;
case 'n':
    return 'N'
    break;
case 'o':
    return 'O'
    break;
case 'p':
    return 'P'
    break;
case 'q':
    return 'q'
    break;
case 'r':
    return 'R'
    break;
case 's':
    return 'S'
    break;
case 't':
    return 'T'
    break;
case 'u':
    return 'U'
 case 'v':
    return 'V'
    break;
case 'w':
    return 'W'
    break;
case 'x':
    return 'X'
    break;
case 'y':
    return 'Y'
    break;
case 'z':
    return 'Z'
default:
    return value;
}


};

function toUpperCaseLoop(string){
        if(!string || string.length <1){
                return "";
        }
    var returnString = "";
    for(var i = 0; i < string.length; ++i){
            var val = toUpperCaseSwitch(string[i]);
            if(val){
            returnString = returnString + toUpperCaseSwitch(string[i]);
                }
        }
        return returnString;

}

var test = "hello World";

 console.log(toUpperCaseLoop(test));