我正在尝试反转输入字符串
var oneway = document.getElementById('input_field').value();
var backway = oneway.reverse();
但萤火虫告诉我这oneway.reverse()
不是一个函数。有任何想法吗?
谢谢
我正在尝试反转输入字符串
var oneway = document.getElementById('input_field').value();
var backway = oneway.reverse();
但萤火虫告诉我这oneway.reverse()
不是一个函数。有任何想法吗?
谢谢
以下技术(或类似技术)通常用于在 JavaScript 中反转字符串:
// Don’t use this!
var naiveReverse = function(string) {
return string.split('').reverse().join('');
}
事实上,到目前为止发布的所有答案都是这种模式的变体。但是,此解决方案存在一些问题。例如:
naiveReverse('foo 𝌆 bar');
// → 'rab �� oof'
// Where did the `𝌆` symbol go? Whoops!
如果您想知道为什么会发生这种情况,请阅读 JavaScript 的内部字符编码。(TL;DR:𝌆
是一个星体符号,JavaScript 将它公开为两个独立的代码单元。)
但还有更多:
// To see which symbols are being used here, check:
// http://mothereff.in/js-escapes#1ma%C3%B1ana%20man%CC%83ana
naiveReverse('mañana mañana');
// → 'anãnam anañam'
// Wait, so now the tilde is applied to the `a` instead of the `n`? WAT.
测试字符串反向实现的好字符串如下:
'foo 𝌆 bar mañana mañana'
为什么?因为它包含一个星形符号 ( 𝌆
)(在 JavaScript 中由代理对表示)和一个组合标记(ñ
最后一个mañana
实际上由两个符号组成:U+006E LATIN SMALL LETTER N 和 U+0303 COMBINING TILDE)。
代理对出现的顺序不能颠倒,否则星体符号将不再出现在“颠倒”字符串中。这就是您��
在上一个示例的输出中看到这些标记的原因。
组合标记始终应用于前一个符号,因此您必须将主符号(U+006E LATIN SMALL LETTER N)视为组合标记(U+0303 COMBINING TILDE)作为一个整体。颠倒它们的顺序将导致组合标记与字符串中的另一个符号配对。这就是为什么示例输出有ã
而不是ñ
.
希望这可以解释为什么到目前为止发布的所有答案都是错误的。
为了回答您最初的问题——如何[正确地] 在 JavaScript 中反转字符串——,我编写了一个能够识别 Unicode 字符串反转的小型 JavaScript 库。它没有我刚才提到的任何问题。该库名为Esrever;它的代码在 GitHub 上,几乎可以在任何 JavaScript 环境中使用。它带有一个 shell 实用程序/二进制文件,因此您可以根据需要轻松地从终端反转字符串。
var input = 'foo 𝌆 bar mañana mañana';
esrever.reverse(input);
// → 'anañam anañam rab 𝌆 oof'
String.prototype.reverse = function () {
return this.split("").reverse().join("");
}
灵感来自我在谷歌搜索javascript string reverse时得到的第一个结果。
谷歌更难,兄弟。这是艾德·曼 (Edd Mann) 的作品。
function reverse (s) {
for (var i = s.length - 1, o = ''; i >= 0; o += s[i--]) { }
return o;
}
http://eddmann.com/posts/ten-ways-to-reverse-a-string-in-javascript/
reverse
是一个数组上的函数,它是一个字符串。您可以将字符串分解为一个数组,然后将其反转,然后将其重新组合在一起。
var str = '0123456789';
var rev_str = str.split('').reverse().join('');