Как перевернуть строку?
Продвинутые темы
Строку переворачивают через цепочку `split('') → reverse() → join('')` или через spread/цикл. Классический способ — `str.split('').reverse().join('')`.
Классический способ
function reverse(str) {
return str.split('').reverse().join('');
}
reverse('hello'); // 'olleh'split('')— строка в массив символов.reverse()— развернуть массив.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.