我正在尝试编写一个函数,该函数将字符串值返回大写,而没有使用toUpperCase()内置函数 例子(“你好”);返回“你好”
没有这个:
var x="hello"
var y=x.toUpperCase();
答案 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)
这是一个功能(非常老派和手动):
正如@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)
$lower = ["a", "b"...] , $upper = ["A", "B"]
example.split("")
这是我尝试做像你这样的事情的原始程序。但请记住,你能做的最糟糕的事情就是再次“发明”一个轮子,所以只需使用内置功能(它更快)
答案 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("");
}
我在这做什么:
我的2美分:)
答案 5 :(得分:0)
始终尽可能使用内置方法。当其他人已经可靠地制造和测试它多年时,没有理由重新发明轮子。
您可以更改某些字母的ASCII代码来执行此操作。计算机上的所有字符都由数字代码表示,因此通过转换为此代码(ASCII或Unicode),执行数字操作,然后转换回来,我们可以转换字母大小写。
您可以找到所有ASCII代码here的表格。
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;
答案 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") );
使用代码进行多次回复后,我将使用正则表达式呈现另一个版本。因为该方法调用三种不同的string
和String
方法,所以它的效率低于内置的.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));