2010-09-21 59 views
1

,如果我有一個數組myArray這我循環通過:JavaScript數組索引測試

for(var i=0;i<myArray.length;i++) { 
    if(myArray[i] == myArray[i+1]) 
     //do something 
} 

顯然,myArray[i+1]將無法​​在最後一次迭代。缺少測試,如果i == (myArray.length - 1),是否有一個乾淨的方法,不要在這個if語句失敗,只是它的計算結果爲false(如果myArray[i+1]超出界限)?

+0

哦,我知道我可能會更好過保持變量指向前值,並在每次迭代中只是測試,如果當前值等於存儲先前的值。但我仍然想知道如何做到這一點,如問題所示。 – bba 2010-09-21 14:35:40

+3

*「顯然,myArray [i + 1]在最後一次迭代中將失敗。」*嗯,是和否,取決於你的意思是「失敗」。它不會拋出異常,但幾乎肯定不是你想要的。它會將'myArray [i]'與'undefined'進行比較。無論如何,最好先停止,如KennyTM的答案所示。 – 2010-09-21 14:36:50

回答

4

爲什麼不只是迭代到第(N-2)項呢?

for(var i=0;i<myArray.length-1;i++) { 
    ... 

,如果你必須遍歷到最後,只有這樣,才能在工作一般是明確檢查,如果該指數是有效的。無論是

for (var i = 0; i < myArray.length; ++ i) 
    if (i+1 != myArray.length) { 
    ... 

for (var i = 0; i < myArray.length; ++ i) 
    if (!(i+1 in myArray)) { 
    ... 

但是,如果你能確保在陣列中的所有項目不能undefinednull,那麼你原來的代碼已經工作,因爲索引出的綁定將返回undefined ,並且undefined == x將是錯誤的,除非x也是undefinednull

+0

我現在覺得很蠢。肯定會工作。仍然有一個優雅的方式在JavaScript中有一個越界數組指針評估爲false而不是拋出一個錯誤? – bba 2010-09-21 14:36:56

+0

...因爲實際上我的邏輯設置的方式(我不是說它不能被重構),我仍然需要到最後一個迭代(N-1)項。 – bba 2010-09-21 14:38:48

+0

實際上'myArray [i + 1]'不會因錯誤而失敗。它會簡單地返回'undefined',與'myArray [i]'相比,它會返回'false'(當然除非myArray [i]'也是'undefined'),一切都會好的。 – RoToRa 2010-09-21 14:40:48