var input="string to be reversed";
function reverse(reversestring)
{
var result;
for(var i=reversestring.length-1;i>=0;i--)
{
result+=reversestring[i];
}
return result;
}
console.log(reverse(input));
你能用上面的代码指导我吗?
var input="string to be reversed";
function reverse(reversestring)
{
var result;
for(var i=reversestring.length-1;i>=0;i--)
{
result+=reversestring[i];
}
return result;
}
console.log(reverse(input));
你能用上面的代码指导我吗?
将字符串拆分为多个部分的数组会更容易,然后 javascript 有一个 reverse() 方法来反转数组的顺序,然后您可以再次将其重新组合在一起:
var input = "string to be reversed";
var output = input.split('').reverse().join('');
var result
用一个空白值初始化你
var result="";
因为如果你不首先用一个值初始化它,那么变量会返回一个未定义的值
优化你的循环(如果你愿意)
for(var i=reversestring.length-1;i--;)
以下技术(或类似技术)通常用于在 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 中反转字符串——我编写了一个小型 JavaScript 库,它能够识别 Unicode 字符串反转。它没有我刚才提到的任何问题。该库称为Esrever;它的代码在 GitHub 上,几乎可以在任何 JavaScript 环境中运行。它带有一个 shell 实用程序/二进制文件,因此您可以根据需要轻松地从终端反转字符串。
var input = 'foo bar mañana mañana';
esrever.reverse(input);
// → 'anañam anañam rab oof'