2017-02-19 8 views
1

Я могу успешно настроить только буквы в моей строке, однако у меня возникают проблемы с преобразованием только букв в их значения unicode. Пожалуйста помоги.Javascript: Как я могу выборочно преобразовать строку символов в их соответствующие значения юникода, добавить 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

Он хотел изменить все буквы в строке в свой юникод. Я не уверен, что делает ваш код на самом деле ... –

+0

@Kinduser какая часть _convert it back to string_ вы не понимаете? –

+0

О, Боже мой, он написал то, что он хочет в титне ... Оки, что угодно. Забудьте. –

0

Я действительно думаю, что это выглядит намного лучше, чем один лайнер. Я на самом деле нужно, чтобы сделать это в интервью недавно, и они казались довольно впечатлены краткостью моего решения

Так вместо этого я хотел бы использовать это: function letterChange(str){ return String.fromCharCode.apply(null,Array.prototype.map.call(str,i=>i.charCodeAt(0)+1)); }

И не о том, что я => u.charCodeAt (0) является лямбда-функцией и не будет работать во всех веб-браузерах без использования транспилятора. Вы также можете использовать это, если вы все еще используете 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», который позволяет нам называть массивную литеральную карту объектов на String, которая не поставляется с картой из коробки. Затем мы передаем эту функцию для применения и возврата полного результата.

+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)) ' –