PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Как перевернуть строку?

Продвинутые темы

Строку переворачивают через цепочку `split('') → reverse() → join('')` или через spread/цикл. Классический способ — `str.split('').reverse().join('')`.

Классический способ

function reverse(str) {
  return str.split('').reverse().join('');
}
reverse('hello'); // 'olleh'
  1. split('') — строка в массив символов.
  2. reverse() — развернуть массив.
  3. join('') — обратно в строку.

Через spread

const reversed = [...str].reverse().join('');

[...str] корректнее для юникода (эмодзи), чем split('').

Через цикл

function reverse(str) {
  let result = '';
  for (let i = str.length - 1; i >= 0; i--) {
    result += str[i];
  }
  return result;
}

Через reduce

const reversed = [...str].reduce((acc, char) => char + acc, '');

Нюанс с юникодом

split('') ломает суррогатные пары (эмодзи, некоторые символы):

'👍'.split('').reverse().join(''); // сломается
[...'👍'].reverse().join('');       // корректно ([...] уважает code points)

Для сложного юникода (составные эмоджи) нужен Intl.Segmenter.

На собеседовании

Часто просят без встроенных методов — тогда цикл или два указателя:

// Два указателя (для массива символов)
let arr = [...str], l = 0, r = arr.length - 1;
while (l < r) { [arr[l], arr[r]] = [arr[r], arr[l]]; l++; r--; }

Коротко для собеседования

Строку переворачивают: str.split('').reverse().join('') (классика) или [...str].reverse().join('') (корректнее для юникода). Альтернативы — цикл с конца, reduce. Без встроенных методов — цикл или два указателя (обмен символов с концов). Нюанс: split('') ломает эмодзи, [...str] уважает code points.

Другие вопросы раздела