2013-07-20 77 views

回答

1

初始化您var result一個空白值 像

var result=""; 

因爲如果你不跟在第一名的值初始化,則變量返回的未定義

 優化你的循環一樣(如果你想)

for(var i=reversestring.length-1;i--;) 
+2

優化不可讀性? – Ryan

+4

這種優化是完全沒有必要的,並且依賴於在減量之前對'i - '發生*的檢查,更不用說依靠0是虛假的,這對於其他語言是不可移​​植的。這在技術上是明確定義的,但不是新手程序員友好的。 – tjameson

+0

@tjameson只是一個問題,你提到哪種語言。所以我可以檢查它(不要證明你錯了,但只是爲了知道)。 – bugwheels94

1

它會更容易只拆分串入部分的數組,然後JavaScript有反向()方法來扭轉排列的順序,然後你就可以再次一起加入回:

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

FIDDLE

+1

我想她想學習 – bugwheels94

+0

的代碼@Ankit - 這是學習。 – adeneo

+1

+1,因爲這是我在練習中所做的,但是-1,因爲它不直接回答OP的問題:「用*上面的*代碼引導我」。 – tjameson

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! 

如果你想知道爲什麼會這樣,read up on JavaScript’s internal character encoding。 (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. 

一個好的字符串,以測試串反轉的實現是the following

'foo bar mañana mañana' 

爲什麼?因爲它包含一個星標()(它是represented by surrogate pairs in JavaScript)和一個組合標記(最後mañana中的實際上由兩個符號組成:U + 006E LATIN小字母N和U + 0303合併TILDE)。

代理對出現的順序不能顛倒,否則星號不會再顯示在「反向」字符串中。這就是爲什麼你在前面的例子的輸出中看到了那些��標記。

合併標記總是適用於前一個符號,因此必須將主符號(U + 006E LATIN小字母N)作爲整體標記(U + 0303合併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'