我能够成功定位我的字符串中的字母,但是我无法将字母转换为其unicode值。请帮忙。
function LetterChanges(str) {
for(var i = 0; i < str.length; i++){
if(str.charCodeAt(i) > 64 && str.charCodeAt(i) < 127){
str.repalce(i, charCodeAt(i));
}
}
console.log(str)
}
LetterChanges("hello*3");
答案 0 :(得分:1)
function LetterChanges(str) {
var newStr = ""; // the result string
for (var i = 0; i < str.length; i++) {
var c = str.charCodeAt(i);
if (c > 64 && c < 127) {
newStr += String.fromCharCode(c + 1);
}
else {
newStr += String.fromCharCode(c);
}
}
return newStr;
}
console.log(LetterChanges("hello*3"));
&#13;
如果您只想替换字母字符a-z
,可以使用这样的正则表达式来完成:
function LetterChanges(str) {
return str.replace(/[a-z]/gi, function(m) {
return String.fromCharCode(
m.charCodeAt(0) + 1
);
});
}
console.log(LetterChanges("Hello*3"));
&#13;
答案 1 :(得分:0)
我实际上认为这作为一个班轮看起来好多了。实际上我最近需要在一次采访中做到这一点,他们对我的解决方案的简洁性印象深刻。
所以我会用这个:
function letterChange(str){
return String.fromCharCode.apply(null,Array.prototype.map.call(str,i=>i.charCodeAt(0)+1));
}
也不是i =&gt; u.charCodeAt(0)是一个lambda函数,并且在不使用转换器的情况下不能在所有Web浏览器中使用。如果您仍在使用es5:
,也可以使用此功能 function letterChange(str){
return String.fromCharCode.apply(null,Array.prototype.map.call(str,function(i){
return i.charCodeAt(0)+1;
}));
}
为了解释这一点,让我们分解一下:
可能引发问题的第一件事是“应用”功能。 Apply需要2个参数,一个对象(在这种情况下无关,所以我们使用null)和一个参数数组。然后,这些参数以逗号分隔的形式传递给我们称之为apply的函数。对于fromCharCode,传递多个参数将返回由所有结果组成的String。接下来,我们传递它'Array.prototype.map.call',它允许我们在String上调用数组文字函数映射,该映射不带有开箱即用的映射。然后我们将此函数传递给apply并返回完整的结果。