尝试编写一个函数,返回转换为的调用字符串值 小写。诀窍是我不能使用
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;
}
要将字符串的大写字母手动转换为小写(如果您不手动执行此操作,则应该使用
String.prototype.toLowerCase()
),您必须:
编写样板函数内容:
function strLowerCase(str) {
let newStr = "";
// TODO
return newStr;
}
循环原始字符串的每个字符,并获取其代码点:
function strLowerCase(str) {
let newStr = "";
for(let i = 0; i < str.length; i++) {
let code = str.charCodeAt(i);
// TODO
} return newStr;
}
检查字符是否为大写字母。 在 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;
}
如果字符是大写的,则将 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;
}
测试您的新功能:
strLowerCase("AAAAAAABBBBBBBCCCCCZZZZZZZZZaaaaaaaaaaa&$*(@&(*&*#@!");
// "aaaaaaabbbbbbbccccczzzzzzzzzaaaaaaaaaaa&$*(@&(*&*#@!"
charCodeAt()
是在字符串上调用的方法,它不是函数。因此,您将该方法应用于字符串,并将要转换的字符的位置作为参数给出。另外,正如MultiplyByZer0提到的,char
这个词是保留的:查看保留字列表。
以下代码解决了该问题:
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'));
这是我(目前)能想到的两个最优雅的解决方案。查看代码中的注释,如果有任何不清楚的地方,请随时询问。
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)
您可以使用 regex 将字符串转换为小写:
:%s/.*/\L&/
const lowerCase = ()=>{
let welcome = prompt("Enter your string");
let lower = '';
for(let i=0; i<welcome.length;i++){
code = welcome.charCodeAt(i);
if(code >= 65 && code <= 90){
let co = code+32;
console.log(co);
lower += String.fromCharCode(co);
}
else
{
lower +=String.fromCharCode(code) ;
}
console.log(lower);
}
}