2017-02-19 53 views
1

我能够只成功地定位字符串中的字母,但是我只能将字母转换为其Unicode值。请帮忙。Javascript:我如何有选择地将一串字符转换为它们各自的unicode值,添加1,然后再转换回字符串?

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

你只想要字母字符? [A-Z] –

回答

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"));

如果要替换只有字母字符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"));

+0

他想要将字符串中的所有字母都更改为unicode。我不确定你的代码实际上做了什么...... –

+0

@Kinduser把它转换回string_的什么部分?你不明白吗? –

+0

哦,我的上帝,他写了他想要的东西......奥基,不管。忘记。 –

0

我其实觉得这看起来更像一个班轮。其实,我需要为此在近日接受采访时,他们似乎对我的解决方案的简洁

所以非常深刻的印象,而不是我这样做: function letterChange(str){ return String.fromCharCode.apply(null,Array.prototype.map.call(str,i=>i.charCodeAt(0)+1)); }

也不是,我=> 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; })); }

要更多地解释这一点让打破它:

可能提出问题的第一件事是“应用”功能。应用需要2个参数,一个对象(在这种情况下无关,所以我们使用null)和一个参数数组。然后这些参数以逗号分隔形式传递给我们所称的应用函数。在fromCharCode的情况下,传递多个参数将返回一个由所有结果组成的字符串。接下来,我们传递给它'Array.prototype.map.call',它允许我们在一个字符串上调用数组字面函数映射,这个字符串不是随地图出来的。然后我们通过这个函数来应用并返回完整的结果。

+0

由于您使用的是ES6的箭头函数,您也可以使用'Array.from'将字符串转换为一个数组,使整个事情变得更加可读:'Array.from('abc')。map c => String.fromCharCode(c.charCodeAt(0)+ 1))。join('')' –

+0

或'String.fromCharCode(... Array.from('abc')。map(c => c。 charCodeAt(0)+ 1))' –

相关问题