Разбиваем нашу первую задачу кодирования

Вступление

В последнее время я проводил время, работая над различными задачами кода на Codewars.com. Изначально у меня были проблемы с задачами или я совершенно не понимал, как их решать, но, потратив больше времени на изучение JavaScript, я начал собирать некоторые проблемы воедино. В этой серии я хочу разбить некоторые из этих задач и обсудить, как я их решил.

Вызов обратных слов

В этой статье я расскажу о проблеме обратных слов. Цель этой задачи - перевернуть слово в строке, и если в строке есть несколько слов, они останутся на том же месте, но слова будут обратными. В этой задаче строка “The quick brown fox jumps over the lazy dog.”, а цель - вернуть“ehT kciuq nworb xof spmuj revo eht yzal .god”. Я рассмотрю .split(), .reverse() и .join() и включил ссылки на MDN для каждого из них внизу сообщения.

Давайте решать

function reverseWords(str) {
return str
}
reverseWords(‘The quick brown fox jumps over the lazy dog.’);

Это то, с чего мы начинаем. У нас есть функция, которая принимает один аргумент - строку. Изначально вы могли подумать, что мы можем сделать str.reverse() для начала, но, к сожалению, .reverse() работает только с массивом. Вместо этого первое, что нам нужно сделать, это использовать use str.split(‘’) для возврата массива символов. Для этого можно использовать .split(‘’) или .split(‘ ‘). Если вы используете разделение без пробелов между кавычками, оно будет разделено после каждого символа. Если вы используете разделение с пробелом между кавычками, оно будет разделено на каждом пробеле в строке. Для этой задачи я решил использовать .split(‘').

function reverseWords(str) {
return str.split(‘’)
}
reverseWords(‘The quick brown fox jumps over the lazy dog.’);

Выход: [‘T’, ‘h’, ‘e’, ‘ ‘, ‘q’, ‘u’, ’i’, ’c’, ’k’,’ ‘, ‘b’, ’r’, ’o’, ’w’, ’n’, ’ ‘, ’f’, ’o’, ’x’, ’ ‘, ’j’, ’u’, ’m’, ’p’, ’s’, ’ ‘, ’o’, ’v’, ’e’, ’r’, ’ , ’t’, ’h’, ’e’, ’ ‘, ’l’, ’a’, ’z’, ’y’, ’ ‘, ’d’, ’o’, ’g’, ’.’].

Теперь, когда у нас есть массивный массив, который разбивается на каждый символ, мы можем добавить .reverse() и перевернуть эту штуку. При использовании методов .split() и .reverse() вам не нужно создавать разные переменные и связывать их вместе, вы можете просто добавить их, например: str.split(‘’).reverse(). Давайте проверим вывод и посмотрим, что у нас получилось:

function reverseWords(str) {
return str.split(‘’).reverse()
}
reverseWords(‘The quick brown fox jumps over the lazy dog.’);

Выход: [‘.’, ’g’, ’o’, ’d’, ’ ‘, ’y’, ’z’, ’a’, ’l’, ’ ‘, ’e’, ’h’, ’t’, ’ ‘, ’r’, ’e’, ’v’, ’o’, ’ ‘, ’s’, ’p’, ’m’, ’u’, ’j’, ’ ‘, ’x’, ’o’, ’f’, ’ ‘, ’n’, ’w’, ’o’, ’r’, ’b’, ’ ‘, ’k’, ’c’, ’I’, ’u’, ’q’, ’ ‘, ’e’, ’h’, ’T’]

Мы приближаемся к тому, чего хотим, но еще не достигли цели. Теперь нам нужно собрать эту штуку обратно в строку, чтобы мы могли поработать над ней. Вот тут-то и пригодится .join(). Мы используем .join() точно так же, как мы использовали .split(). Для этого нам нужно добавить к .join() тот же аргумент, что и на .split():

function reverseWords(str) {
return str.split(‘’).reverse().join(‘’)
}
reverseWords(‘The quick brown fox jumps over the lazy dog.’);

Выход: ‘.god yzal eht revo spmuj xof nworb kciuq ehT’

Похоже, мы почти у цели. Слова перевернуты, но теперь они не в том месте. Оглядываясь назад на цель, мы должны вернуть «ehT» на первое место и «.god» на последнее место. Для этого нам нужно снова разделить строку на массив, чтобы мы могли снова ее перевернуть. На этот раз мы будем использовать .split(‘ ‘). Убедитесь, что между кавычками есть пробел, это позволяет нам разделять их по пробелам, а не после каждого символа.

function reverseWords(str) {
return str.split(‘’).reverse().join(‘’).split(‘ ‘)
}
reverseWords(‘The quick brown fox jumps over the lazy dog.’);

Выход [ ‘.god’, ‘yzal’, ‘eht’, ‘revo’, ‘spmuj’, ‘xof’, ‘nworb’, ‘kciuq’, ‘ehT’ ]

Мы приближаемся к завершению этой работы! Теперь, когда у нас есть строка, разделенная на массив, мы можем изменить порядок слов. .reverse() работает, меняя порядок каждого элемента в массиве, поэтому, когда мы используем его сейчас, он не изменит буквы в каждой строке, он просто изменит позицию индекса каждой строки в массиве.

function reverseWords(str) {
return str.split(‘’).reverse().join(‘’).split(‘ ‘).reverse()
}
reverseWords(‘The quick brown fox jumps over the lazy dog.’);

Выход [ ‘ehT’, ‘kciuq’, ‘nworb’, ‘xof’, ‘spmuj’, ‘revo’, ‘eht’, ‘yzal’, ‘.god’ ]

Так выглядит намного лучше! Последнее, что нам нужно сделать для выполнения этой задачи, - это преобразовать этот массив обратно в строку, мы сделаем это, снова используя .join(). В последнем .split(‘ ‘), который мы использовали, у нас был пробел между кавычками, когда мы используем .join(‘ ‘), он должен быть таким же.

function reverseWords(str) {
return str.split(‘’).reverse().join(‘’).split(‘ ‘).reverse().join(‘ ‘)
}
reverseWords(‘The quick brown fox jumps over the lazy dog.’);

Выход ‘ehT kciuq nworb xof spmuj revo eht yzal .god’

Вот оно! Это последняя функция, которая обеспечивает результаты, которые мы ищем:

function reverseWords(str) {
return str
.split(‘’)
.reverse()
.join(‘’)
.split(‘ ‘)
.reverse()
.join(‘ ‘);
}
reverseWords(‘The quick brown fox jumps over the lazy dog.’);

Заключение

Когда вы объединяете эти вызовы в цепочку, не обязательно, чтобы все они были на одной линии. Как только я сохраняю, prettier берет на себя и помещает их все, чтобы мне было легче читать. Когда для меня все так разбито, мне кажется, что мой взгляд легче скользит по ним, и я могу быстрее понять, что происходит.

Вот несколько ссылок на MDN, если вы хотите узнать больше о разделении, реверсе или присоединении:

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