2010-09-21 2 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

+3

* «Понятно, что myArray [i + 1] потерпит неудачу на последней итерации». * Ну, да и нет, зависит от того, что вы подразумеваете под «fail». Это не исключение, но это почти наверняка не то, что вы хотите. Он будет сравнивать 'myArray [i]' с 'undefined'. Несмотря на это, лучше всего остановиться раньше, как показано в ответе KennyTM. –

ответ

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)) { 
    ... 

Однако, если вы можете гарантировать, что все элементы в массиве не может быть undefined или null, то исходный код уже работает, так как индекс вне границы возвратит undefined , и undefined == x будет ложным, если x также не является undefined или null.

+0

ну я теперь чувствую себя немым. да, это определенно сработает. все еще есть изящный способ в javascript, чтобы указатель массива out of bounds оценивал значение false вместо того, чтобы бросать ошибку? – bba

+0

... потому что на самом деле моя логика настроена (и я не говорю, что она не может быть реорганизована) Мне все равно нужно добраться до последней итерации (N-1). – bba

+0

Фактически 'myArray [i + 1]' не сработает с ошибкой. Он просто вернет 'undefined', который по сравнению с' myArray [i] ', который вернет' false' (если, конечно, 'myArray [i]' также 'undefined'), и все будет в порядке. – RoToRa

Смежные вопросы