0
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));

你能用上面的代码指导我吗?

4

3 回答 3

1

将字符串拆分为多个部分的数组会更容易,然后 javascript 有一个 reverse() 方法来反转数组的顺序,然后您可以再次将其重新组合在一起:

var input  = "string to be reversed";
var output = input.split('').reverse().join('');

小提琴

于 2013-07-20T19:12:51.153 回答
1

var result用一个空白值初始化你

var result="";

因为如果你不首先用一个值初始化它,那么变量会返回一个未定义的值

 优化你的循环(如果你愿意)

for(var i=reversestring.length-1;i--;)   
于 2013-07-20T19:14:07.333 回答
0

以下技术(或类似技术)通常用于在 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'
于 2014-03-31T07:02:00.453 回答