Выбор ответа Middle Разминка: короткие функции обновлено

Разворот строки с эмодзи

Вопрос

Какая функция корректно развернёт строку 'ок😀', не сломав эмодзи?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: (s) = [...s].reverse().join(''). split('') делит строку по 16-битным единицам UTF-16, и эмодзи, занимающий суррогатную пару, распадается на две половинки; после разворота пара окажется в обратном порядке и станет мусором.

Варианты ответа

  1. (s) => s.split('').reverse().join('')
  2. (s) => s.split('').sort().join('')
  3. (s) => s.toReversed()
  4. (s) => [...s].reverse().join('')правильный ответ

Разбор

split('') делит строку по 16-битным единицам UTF-16, и эмодзи, занимающий суррогатную пару, распадается на две половинки; после разворота пара окажется в обратном порядке и станет мусором. Spread использует итератор строки, который идёт по кодовым точкам, и эмодзи остаётся целым. У строк нет метода toReversed, он есть только у массивов. sort вообще не разворачивает, а сортирует символы. Для составных эмодзи (флаги, семьи) нужен Intl.Segmenter.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.