为什么用javascript触摸这么简单的主题?反向字符串?真的像我们想象的那么简单吗?会给这个功能带来问题吗?只是谷歌如何反向与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"
在不影响代码性能的情况下执行此操作的最简单方法, 但是, 如果你的项目需要处理, 那么这条很棒的代码行有一些不好的事情, 你应该考虑
以下示例将显示此行代码失败的情况:
// 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字符串, 例如在基本多语言平面之外的字符, 该字符串将被错误地反转。如果你想详细了解一下(并想睡一会儿), 请阅读本文, 这将消除你的疑问。
如果你是受此问题困扰并必须解决的不幸者之一, 也许你并不是那么不幸。
由mathiasbynens创建和发布的esrever库可以轻松解决此问题。
如何使用它
该库有一个详细的文档, 说明如何在每个javascript环境(服务器端, 浏览器, shell)中包含和使用它。以下示例显示了如何在浏览器中使用它:
<script src="path/to/library/esrever.js"></script>
<script>
// 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'
</script>
此函数接受一个字符串, 并返回该字符串的反向版本, 正确考虑了Unicode组合标记和星体符号的情况。
我以前怎么说, 如果你不使用UTF-16字符串, 则可以使用最知名的函数来反转字符串。
你是这个问题的受害者吗?在评论框中告诉我们此解决方案如何为你服务。
评论前必须登录!
注册