2017-02-19 31 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))' –

相關問題