Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   for внутри for (https://javascript.ru/forum/misc/16895-vnutri.html)

ZLoD3Y 27.04.2011 12:12

for внутри for
 
Доброго времени суток, уважаемые, сразу попрошу не посылать на гугл, меня там, по идее, должны уже забанить за количество похожих запросов.

В общем такой вопрос, есть следующий код
var i=0;

while(i < data.length)
	{
		i++;
		for (var key in data[i]) 
			{
				var val = data[key][7];

    			}
	}


while перебирает все один раз и застывает... тобишь вообще ничего не происходит.
Если перебирать массив вручную, с указанием индексов - все на месте.
Кто может подсказать, куда рыть дальше.

with-love-from-siberia 27.04.2011 12:21

Цитата:

Сообщение от ZLoD3Y
перебирает все один раз и застывает.

Что значит "застывает"? Код после внутреннего цикла выполняется? Присваивания переменной i в коде есть?

ZLoD3Y 27.04.2011 12:33

Кроме того, что есть сдесь - переменной i нигде и ничего не присваивается , проверил 3 жды

Внутренний цикл выполняется, то есть алертом я могу получить val, но после выполнения внутреннего цикла alert(i)(если его поставить в самом конце первого цикла) ничего не выводит.

firebug выдает следующее:

data[key] is undefined

var val = data[key][7];

Sweet 27.04.2011 12:36

Потому что надо:
var val = data[i][key][7];

with-love-from-siberia 27.04.2011 12:38

Цитата:

Сообщение от ZLoD3Y
data[key] is undefined

Ну и? Что это означает? Значение не определено. Неопределенная переменная не может иметь свойств. Поэтому следующая строка выдает ошибку.

ZLoD3Y 27.04.2011 12:49

Цитата:

Сообщение от Sweet (Сообщение 102316)
Потому что надо:
var val = data[i][key][7];



это с чего вдруг? у меня же не 3х уровневый массив) зачем там еще один индекс добавлять? і там используется совершенно для другого.
На всякий случай проверил , конечно, но , как я и предполагал, мне вывело явно не мои значения, вывело undefined.

Цитата:

Сообщение от with-love-from-siberia
Ну и? Что это означает? Значение не определено.

Я не могу отловить, в каком куске у меня ошибка.. внутренний цикл то сначала отрабатывается первый раз, и выводит мне переменную, которая нужна, а второй раз он уже выдает undefined

Kolyaj 27.04.2011 12:53

Цитата:

Сообщение от ZLoD3Y
это с чего вдруг? у меня же не 3х уровневый массив) зачем там еще один индекс добавлять?

Вы ключи перебираете у объекта data[i], а подставляете их почему-то в data. А какой у вас там массив, никто не знает, вы ж его никому не показали.

ZLoD3Y 27.04.2011 13:02

Да, действително, простите.

Цитата:

Array (

[0] => Array (

[0] => link
[1] => 1
[2] => 0
[3] => 39
[4] => 3
[5] => 2
[6] => /tariff/Vip_kino
[7] => Vip-кино
[8] => 1)

[1] => Array (

[0] => link
[1] => 1
[2] => 0
[3] => 39
[4] => 3
[5] => 2
[6] => /tariff/Vip_kino
[7] => Vip-кіно
[8] => 2 ) )
Вот массив.

Немного проясню замысел, сначала мне нужно получить длинну массива, а потом добраться до определенных элементов внутреннего массива, по этому использую 2 цикла. Первый цикл перебирает основной массив, второй - внутренний.

Kolyaj 27.04.2011 13:27

А почему вы верхний перебираете циклом while, внутренний циклом for-in, хотя оба надо перебирать обычным циклом for?

with-love-from-siberia 27.04.2011 13:49

размерность массива определяется из свойства массив.length. Если искомый элемент находится на фиксированном месте - нет нужды перебирать весь массив - обратитесь к нему напрямую. А массивы достаточно перебирать в большинстве случаев циклом for:
Код:

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


Часовой пояс GMT +3, время: 22:58.