2015-05-13 76 views
-1

不太清楚該如何解釋這個問題。數組中的未定義元素

當我做

function reverseArray(array) { 
    var arr = []; 
    for(i = 0; i <= array.length; i++) 
    arr.unshift(array[i]); 
    return arr; 
} 

然後用console.log(reverseArray(["A", "B", "C"]));稱它爲我的輸出是:

[undefined, "C", "B", "A"]

但是,當我從array.length在減去1 for循環像這樣

function reverseArray(array) { 
    var arr = []; 
    for(i = 0; i <= array.length - 1; i++) 
    arr.unshift(array[i]); 
    return arr; 
} 

我得到了我所期望的, h是:["C", "B", "A"]

什麼給?

+0

喊出觸發快樂downvoter!感謝您的反饋。 – sabaeus

+1

有些人在海報似乎沒有對他或她的代碼進行基本調試的情況下降低了問題的質量。在這種特殊情況下,您真正​​需要做的就是逐步執行代碼並觀察它的執行情況。你會看到它做了額外的迭代,將undefined放到數組中,從而解決了你的問題,而不必費心去發佈到SO或讓別人看你的問題。在這種情況下,我自己通常不會低估,但我認爲這樣做不合理。學習如何使用調試器,並且您將能夠解決許多您自己的問題。 –

+0

我發現這個錯誤,我只是不太明白*爲什麼數組索引從0運行到長度爲-1。這是我的愚蠢嗎?這似乎是違反直覺的,但那是因爲我只是忘了那條規則。 – sabaeus

回答

3

由於數組索引是從0到長度-1,因爲您使用的循環i<=array.lengthi變爲array.lengtharray[i]將是未定義的。

因此,在你的循環,你需要i=0; i<array.length

function reverseArray(array) { 
 
    var arr = []; 
 
    for (i = 0; i < array.length; i++) 
 
    arr.unshift(array[i]); 
 
    return arr; 
 
} 
 
console.log(reverseArray(["A", "B", "C"]));

+0

哦,對了,我忘了那部分。 – sabaeus

1

array變量,你在這樣的傳遞爲["A", "B", "C"]是3項長。

你的條件

for(i = 0; i <= array.length; i++) 

會重複4次而不是3

當它看起來array[3],沒有什麼,所以undefined轉移。

1

是不是很明顯??數組索引從0到(長度 - 1)。所以你不移位的最後一個值是array [length],它超出了邊界,因此是未定義的!

以下jsbin將幫助您瞭解

jsBin