Распространенным и довольно простым вопросом во время собеседования может быть: Как перевернуть строку. В этой статье мы собираемся использовать 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 и заканчивая редукцией и функциональным программированием.

Если вам нравится то, что вы прочитали, пожалуйста, следуйте за мной.