尝试编写一个返回转换为的调用字符串值的函数
小写。诀窍是我不能使用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);
}
});
答案 0 :(得分:2)
要将字符串的大写字母转换为小写手动(如果您不是手动执行,则只需使用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;
}
检查字符是否为大写字母。 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;
}
如果字符为大写,则在其代码点添加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&$*(@&(*&*#@!"
答案 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&/