2012-02-18 4 views
3

Мой JS-код имеет массив arrayResults, некоторые его элементы могут быть «неопределенными» - это особенность алгоритма. Для того, чтобы убедиться, что там нет таких элементов я использую код последующие:Проверка элемента массива на "undefined" в JavaScript

for (i in arrayResults) 
     { 
      if (typeof(arrayResults[i])=='undefined') 
      { 
       // ask user to repeat 
      }; 
     }; 

Но, используя отладчик, я обнаружил, что JS-движок передает «неопределенное» -item массива (в течение состояния), соответственно, I не имеют возможности провести сравнение и выполнить следующие инструкции.

Итак, есть ли способ проверить «неопределенные» элементы в массиве? (Я не могу установить элементы массива в последовательности, потому что, если я нашел позицию «неопределенного» элемента, я говорю пользователю перейти в эту позицию).

ответ

8

Не используйте петлю for..in для итерации массивов. Если вас интересуют причины, пожалуйста, прочитайте this StackOverflow question. Они должны использоваться только для перемещения объектов.

Используйте простую старую школу for, вместо этого она решит вашу проблему.

for (var i = 0, l = arrayResults.length; i < l; i++) { 
    if (typeof(arrayResults[i])=='undefined') { 
     // ask user to repeat 
    }; 
}; 

jsFiddle Demo

+0

Это работает! Большое спасибо за код и ссылку! –

+0

Добро пожаловать. – kapa

+1

+1 Здесь старая школа для цикла превосходит все функции более высокого порядка, такие как '.some()' или '.reduce()' или даже '.indexOf()', потому что методы массива пропускают так называемый " дыры ", элементы, которые являются" неопределенными ", потому что они никогда не были установлены. – Paul

4

Вы можете использовать indexOf метод на массив.

function hasUndefined(a) { 
    return a.indexOf() !== -1; 
} 

hasUndefined([1,2,3, undefined, 5]); 
+1

Но 'hasUndefined ([1,2,3 ,,,,,,, 7])' возвращает 'false', поэтому это не является надежным. – Paul

+0

@Paul Хорошая точка! –

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