Как правильно перевернуть строку с помощью JavaScript

Зачем трогать такую ​​простую тему с помощью JavaScript? Перевернуть строку? Это так просто, как мы думаем? Дает ли эта функция проблемы? Просто Google, как перевернуть строку с помощью JavaScript.

// The most easy way to reverse a string
var text = "This is my text";
var reversedText = text.split('').reverse().join('');
// if you don't know how it works ...
// string.split("") : split a string in every character and convert it to an array
// something like : ["T", "h", "i", "s", " ", "i", "s", " ", "m", "y", " ", "t", "e", "x", "t"]
// then
// string.split("").reverse() // will reverse the array for
// ["t", "x", "e", "t", " ", "y", "m", " ", "s", "i", " ", "s", "i", "h", "T"]
// then
// string.split("").reverse().join("") : Join every item in the array by ""
console.log(reversedText); // Outputs "txet ym si sihT"

String.split ( »). обратный (). присоединиться ( »)

Самый простой способ сделать это без ущерба для производительности вашего кода, однако в этой удивительной строке есть пара плохих вещей, которые вы должны учитывать, если ваш проект нуждается в обработке

Следующие примеры покажут случаи, когда этот строковый код не работает:

// Wrap the line in a function to understand better
var reverseString = function(text){
return text.split("").reverse().join("");
};
// case 1
reverseString('mañana man?ana');
// outputs : "ana?nam anañam" (note the accent in the "a" character in the second word)
// case 2
reverseString('foo ???? bar');
// outputs 'rab ?? oof'
// The `????` symbol dissapears, which shouldn't happen because our string changes !

Почему это происходит? Просто, кодификация. Строка будет неверно изменена для строк UTF-16, которые содержат суррогатные пары, например символы вне базовой многоязычной плоскости. Если вы хотите действительно подробное объяснение (и хотите немного поспать), прочитайте эту статью, она прояснит ваши сомнения.

Решение

Если вы один из несчастливых людей, которые страдают от этой проблемы и должны ее решить, возможно, вам не так не повезло.

Библиотека Esrever, создан и опубликован mathiasbynens решит эту проблему без всякой боли.

Как это использовать

Библиотека имеет подробную документацию о том, как включить ее и использовать в любой среде javascript (на стороне сервера, в браузере, в оболочке). В следующем примере показано, как использовать его в браузере:


// esrever variable will be now available when you include the library
var input = 'Lorem ipsum ???? dolor sit ame??t.';
var reversed = esrever.reverse(input);
console.log(reversed); // outputs '.te??ma tis rolod ???? muspi meroL'

Эта функция принимает строку и возвращает обратную версию этой строки, правильно учитывая Unicode, объединяющий метки и астральные символы.

Мне действительно нужно использовать библиотеку, чтобы перевернуть строку?

Как я уже говорил, вы можете использовать наиболее известную функцию для обращения строки, если вы не используете строки UTF-16.

Вы жертва этой проблемы? Скажите нам в поле для комментариев, как это решение работает для вас.

Ссылка на основную публикацию
Adblock
detector