2016-10-19 18 views
0

我想檢查一個字符串是否是迴文,但是在反轉字符串時遇到問題。我知道Javascript中有很多關於迴文的問題,但我想在我的路上找到它,但仍然無法找到有關這些問題的解決方案。Javascript - 字符串後未定義的數組值.split

代碼

function reverse(string){ 
    var str = string; 
    var split = str.split(""); 
    var newStr= ""; 

    for(var i=split.length; i>=0; i--){ 
    newStr += split[i]; 
    } 

    console.log(newStr); 
} 

var str= 'blue'; 

reverse(str); 

結果

"undefinedeulb" 

問題

正如我們所看到的,結果是在字符串的開頭一個未定義的值。 我用PHP腳本測試了這段代碼,它工作正常。這怎麼會是Javascript的問題?以及如何擺脫它?

+3

'str.split( 「」)。反向()。加入( 「」)'反轉字符串 – adeneo

+1

您試圖訪問'拆分[split.length]'這是未定義。你只有一個 – Li357

+0

FYI,它似乎在PHP中工作的原因是未定義的索引似乎以某種方式被強制爲空字符串。但它仍然是錯誤的。 –

回答

1

數組的索引與開始,例如在

var arr = ["a", "b", "c", "d", "e"];

最後一個是arr[4] // 「e」 的

arr.length但是5,所以 arr[5]是undefined

所以arr[arr.length]總是undefined

在你的榜樣第一次迭代中,i等於split.lengthundefined,因此嘗試

for(var i = split.length - 1; i >= 0; i--)

+1

或者:'for(var i = split.length; i--;){}' –

+0

這是真的,我也同意adeneo的評論,有一種更簡單的方法來實現這個功能,比利想弄明白自己我想我會盡可能接近他們的實施 –

+0

嘿,謝謝你體育!它按預期工作:) – Billy

0

split.length等於4,但因爲數組是零索引的,所以需要從3開始並向下移動到零。

function reverse(string){ 
 
    var str = string; 
 
    var split = str.split(""); 
 
    var newStr= ""; 
 

 
    for(var i = split.length -1; i >= 0; i--){ 
 
    newStr += split[i]; console.log(i); 
 
    } 
 

 
    console.log(newStr); 
 
} 
 

 
var str= 'blue'; 
 

 
reverse(str);

+0

正是!感謝Jeremy S – Billy