Распространенным и довольно простым вопросом во время собеседования может быть: Как перевернуть строку. В этой статье мы собираемся использовать JavaScript в качестве нашего языка. Тем не менее, решения, обсуждаемые здесь, должны быть очень легко применимы и к другим языкам программирования.
Давайте сначала определим проблему и ожидаемый результат. Начнем со строки:
const string = ‘abcdef’;
Наш ожидаемый результат:
const expected = 'fedcba';
Первое решение основано на классическом цикле for. По сути, мы начинаем с конца строки и перебираем все символы в обратном порядке:
function reverse(string) { let reversed = ''; for (let i = string.length - 1; i >= 0; i -= 1) { reversed += string[i]; } return reversed; }
Мы можем переписать тот же код с более новым синтаксисом for…of:
function reverse(string) { let reversed = ''; for (const character of string) { reversed = character + reversed; } return reversed; }
Обратите внимание, что в этом случае мы не зацикливаемся в обратном порядке. Вместо этого мы добавляем символы в обратном порядке (добавляем символы в начало обратной переменной).
Второе решение основано на методе Array.prototype.reverse().
Все строки на самом деле являются массивами символов. Мы воспользовались этим в предыдущем решении, обращаясь к отдельным символам в строке, используя ее индекс.
Однако мы не можем просто запустить:
string.reverse(); // this won’t work
Строки в JavaScript неизменяемы. Поэтому, чтобы сделать это, нам нужно сначала преобразовать строку в массив одиночных строк. Массивы изменяемы, и мы сможем это изменить:
function reverse(string) { const array = string.split(''); array.reverse(); return array.join(''); }
Первая строка нашего решения разбивает строку на массив. Затем мы меняем порядок в обратном порядке и, наконец, снова соединяем массив в одну строку и возвращаем результат.
Кроме того, мы можем объединить все три строки кода в одну:
function reverse(string) { return string.split('').reverse().join(''); }
Последнее решение основано на методе Array.prototype.reduce() и функциональном программировании.
Reduce работает с каждым элементом массива, применяет заданную функцию и возвращает одно значение.
Начнем с преобразования строки в массив строк с помощью метода split(‘’)
. Тогда мы можем использовать reduce(callback, initialValue)
.
Первый параметр: callback
— это стрелочная функция, которая принимает два параметра: accumulator
— перевернутая строка и currentValue
— текущий символ в массиве. Второй параметр, initialValue
, представляет собой пустую строку ‘’
, которую мы хотим использовать для хранения обратного значения (это в основном эквивалентно let reversed = ‘’;
в других решениях).
function reverse(string) { return string.split('').reduce((reversed, character) => { return character + reversed; }, ''); }
В этой статье мы рассмотрели три различных способа обращения строки. Начиная с очень классического, через Array helper и заканчивая редукцией и функциональным программированием.
Если вам нравится то, что вы прочитали, пожалуйста, следуйте за мной.