Четвертый день программы "#100 Days Of Code".
Сегодня нужно написать функцию, которая будет менять слово в строке с учетом регистра
Search and Replace
Дано следующее задание:
function myReplace(str, before, after) {
return str;
}
myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");
На первый взгляд мне показалось задание слишком простым и я попробовал его решить методом replace(). Все было бы хорошо, и строка на входе, и замену производит, НО регистр не учитывает.
Поэтому пришлось подойти к решению с другой стороны. Первым делом, для того чтобы была возможность обратиться к каждому отдельному слову, пришлось превратить строку в массив методом split()
Теперь появилась возможность сделать проверку того, является ли первая буква слова, подлежащего замене, заглавной
Для этого мы используем наш любимый if
if(before[0] === before[0].toUpperCase() ) {
after = after.charAt(0).toUpperCase() + after.slice(1);
}
В действии смой функции - на строке с переменной after используем метод charAt(). Он вернет нам заглавную букву в замененном слове, если в заменяемом она была заглавная. Но этот метод вернет только одну заглавную буквуДля того, чтобы вернуть все слово стоит применить метод slice(), с аргументом - 1. То есть вернуть все буквы данного слова начиная со второй. Теперь нам остается присоединить их к первой, заглавной букве +
Поскольку, мы уже имеем дело со str, как с массивом, а не строкой, то придется отказаться от метода replace(), которым я пытался решить задачу с первого раза и вспомнить о старом , добром переборе массива for
for(var i = 0; i < str.length; i++) {
if(str[i] == before) {
str[i] = after;
return str.join(' ');
}
}
Думаю, что здесь все понятно без объяснений. Остановлюсь только на том, что в конце мы объединяем массив в строку методом join()
Все ссылки, которые я привел в тексте, возможно, будут полезны тем, кто захочет более подробно прочитать о данных методах.
Ниже привожу полученный код полностью.
function myReplace(str, before, after) { str = str.split(' '); if(before[0] === before[0].toUpperCase() ) { after = after.charAt(0).toUpperCase() + after.slice(1); } for(var i = 0; i < str.length; i++) { if(str[i] == before) { str[i] = after; return str.join(' '); } } return str; } myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");
Примеры того, что вернет функция:
myReplace("Let us go to the store", "store", "mall")
return "Let us go to the mall".
myReplace("He is Sleeping on the couch", "Sleeping", "sitting")
return "He is Sitting on the couch".
myReplace("This has a spellngi error", "spellngi", "spelling")
return "This has a spelling error".
myReplace("His name is Tom", "Tom", "john")
return "His name is John".
myReplace("Let us get back to more Coding", "Coding", "algorithms")
return "Let us get back to more Algorithms".
Комментариев нет:
Отправить комментарий