2013-03-24 3 views
0

У меня есть список объектов (data), я делаю это:Javascript - почему мой цикл массива не работает?

for (var i = 0; data.length < i; i++) {...}

Но это не работает. Когда я использую это:

for (var i in data) {

Он работает, но цикл три раза, когда есть только один объект, в данном случае i является: 0 (правильно), indexOfObject (WTF), removeItem (ВТФ) ,

Почему мое первое выражение не работает? Каковы эти два значения werid i? Я делаю что-то неправильно?

Редактировать: Поскольку это дело немного сложнее, лучшее, что я могу сделать, это предоставить скриншот моего объекта данных: screenshot

+4

Вам нужно будет опубликовать фактическое значение массива, чтобы люди могли предоставить полный точный ответ. – Pointy

+0

'for ... in' выполняет итерации по всем перечислимым свойствам объекта. 'data' кажется объектом * array-like *, а не нормальным массивом и, как представляется, обладает свойствами' indexOfObject' и 'removeItem'. –

+0

Можете ли вы поставить скрипку? – DevelopmentIsMyPassion

ответ

4

Проверьте оператор for цикла, условие петли (data.length < i) является наоборот и, вероятно, никогда не выполняется.

Оно должно быть:

for (var i = 0; i < data.length; i++) 
    { 
     // Now write your code 
    } 
+0

Бинго. Я не видел этой ошибки. Спасибо. :) – ojek

+0

Извините за просто захват вашего сообщения, но я почувствовал, что ошибка явно более полезна. –

+0

ohh @FelixKling без проблем. Я просто это делал. btw thank for edit :) – Sachin

1

Если вы действительно имеют массиву

var a = ["hello", "world"]; 

или

var a = new Array(); 
a[0] = "hello"; 
a[1] = "world"; 

Тогда ваш первый цикл (с индексной переменной) правильный. Вы должны использовать цикл infor для итерации по свойствам объектов, но индексированный стиль для числовых индексированных свойств массива.

редактировать — упс хороший вызов @Sachin - ваш тест for петли в обратном направлении.

Если у вас есть простой объект, и вы хотите, чтобы перебирать его свойства, но пропустить свойства найденных на цепи прототипов объекта, вы можете сделать что-то вроде этого:

for (var name in obj) { 
    if (obj.hasOwnProperty(name)) { 
    var value = obj[name]; 
    // do stuff 
    } 
} 
0

я мог видеть из приведенной выше коды, вы дали неверное условие внутри для цикла. Во-первых, вы инициализируете переменную i до 0, а затем проверяете data.length < 0. Может ли любое значение длины быть меньше нуля?

вы можете использовать его как: -

for (var i = 0; i<data.length; i++) {...} 

Попробуйте это будет работать.

+0

* «Может ли любое значение длины быть меньше нуля?» * Поскольку это не обычный массив, это на самом деле может. Это не имеет смысла, но это технически возможно. –

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