Js как перевернуть строку?
Строка с эмодзи,ннужно наоборот, незнаю почему значки разваливаются
Работа и карьера
Программирование
Компьютеры и связь
Учёба и образование
Развлечения
Ваш вопрос
Строка с эмодзи,ннужно наоборот, незнаю почему значки разваливаются
4.20
Для составных эмодзи разбивайте строку через Intl.Segmenter с granularity: 'grapheme', затем разворачивайте массив сегментов. split('') может разорвать даже одиночный символ вне базовой плоскости Unicode.
Почему привычный способ ломает символы
Строки JavaScript хранятся как последовательности единиц UTF-16. Вызов split('') разделяет именно такие единицы, а не все видимые символы целиком. Поэтому разворот полученного массива способен поменять местами половины суррогатной пары. На простом слове ошибка незаметна, а на эмодзи уже появляется повреждённый результат.
Когда достаточно Array.from
Выражение Array.from(text).reverse().join('') работает по кодовым точкам. Оно сохраняет целиком многие одиночные эмодзи и подходит для текста, где этого уровня разбиения достаточно. Однако составная семья, флаг или буква с отдельным комбинируемым знаком может занимать несколько кодовых точек. Их внутренний порядок такой способ тоже изменит.
Как сохранить графемы
Для разворота воспринимаемых знаков используйте сегментацию на графемы:
function reverseText(text) {
const segmenter = new Intl.Segmenter('ru', { granularity: 'grapheme' });
const parts = Array.from(segmenter.segment(text), item => item.segment);
return parts.reverse().join('');
}
Здесь разворачивается массив целых сегментов. Исходная строка не меняется, функция возвращает новое значение. Пустая строка даст пустой результат, а пробелы и знаки пунктуации тоже участвуют в перестановке. Если нужно поменять порядок слов, сохранив сами слова, потребуется другое правило разбиения.
Что проверить перед использованием
Проверьте наличие Intl.Segmenter в той среде, где будет выполняться код. Для старых сред понадобится библиотека сегментации или ограничение допустимого текста. В тестах используйте обычную кириллицу, комбинируемый знак, флаг и составной эмодзи. Обратный порядок графем означает перестановку знаков, но не зеркальное отражение их изображения и не автоматическое исправление правил отображения письма справа налево.
Array.from(text).reverse().join(''). В отличие от split(''), это разделяет строку по кодовым точкам и не ломает одиночный символ, представленный суррогатной парой.{granularity: 'grapheme'}, соберите segment каждого фрагмента, разверните массив и соедините его.Пока нет премиум-вопросов в подборке
Не нашли то, что искали?
Задайте свой вопрос
Ответить на вопрос