Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.04.2011, 12:12
Аватар для ZLoD3Y
Интересующийся
Отправить личное сообщение для ZLoD3Y Посмотреть профиль Найти все сообщения от ZLoD3Y
 
Регистрация: 27.04.2011
Сообщений: 16

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

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

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

    			}
	}


while перебирает все один раз и застывает... тобишь вообще ничего не происходит.
Если перебирать массив вручную, с указанием индексов - все на месте.
Кто может подсказать, куда рыть дальше.
Ответить с цитированием
  #2 (permalink)  
Старый 27.04.2011, 12:21
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Сообщение от ZLoD3Y
перебирает все один раз и застывает.
Что значит "застывает"? Код после внутреннего цикла выполняется? Присваивания переменной i в коде есть?
Ответить с цитированием
  #3 (permalink)  
Старый 27.04.2011, 12:33
Аватар для ZLoD3Y
Интересующийся
Отправить личное сообщение для ZLoD3Y Посмотреть профиль Найти все сообщения от ZLoD3Y
 
Регистрация: 27.04.2011
Сообщений: 16

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

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

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

data[key] is undefined

var val = data[key][7];
Ответить с цитированием
  #4 (permalink)  
Старый 27.04.2011, 12:36
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Потому что надо:
var val = data[i][key][7];
Ответить с цитированием
  #5 (permalink)  
Старый 27.04.2011, 12:38
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Сообщение от ZLoD3Y
data[key] is undefined
Ну и? Что это означает? Значение не определено. Неопределенная переменная не может иметь свойств. Поэтому следующая строка выдает ошибку.
Ответить с цитированием
  #6 (permalink)  
Старый 27.04.2011, 12:49
Аватар для ZLoD3Y
Интересующийся
Отправить личное сообщение для ZLoD3Y Посмотреть профиль Найти все сообщения от ZLoD3Y
 
Регистрация: 27.04.2011
Сообщений: 16

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


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

Сообщение от with-love-from-siberia
Ну и? Что это означает? Значение не определено.
Я не могу отловить, в каком куске у меня ошибка.. внутренний цикл то сначала отрабатывается первый раз, и выводит мне переменную, которая нужна, а второй раз он уже выдает undefined

Последний раз редактировалось ZLoD3Y, 27.04.2011 в 12:54.
Ответить с цитированием
  #7 (permalink)  
Старый 27.04.2011, 12:53
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от ZLoD3Y
это с чего вдруг? у меня же не 3х уровневый массив) зачем там еще один индекс добавлять?
Вы ключи перебираете у объекта data[i], а подставляете их почему-то в data. А какой у вас там массив, никто не знает, вы ж его никому не показали.
Ответить с цитированием
  #8 (permalink)  
Старый 27.04.2011, 13:02
Аватар для ZLoD3Y
Интересующийся
Отправить личное сообщение для ZLoD3Y Посмотреть профиль Найти все сообщения от ZLoD3Y
 
Регистрация: 27.04.2011
Сообщений: 16

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

Цитата:
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 цикла. Первый цикл перебирает основной массив, второй - внутренний.

Последний раз редактировалось ZLoD3Y, 27.04.2011 в 13:05.
Ответить с цитированием
  #9 (permalink)  
Старый 27.04.2011, 13:27
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

А почему вы верхний перебираете циклом while, внутренний циклом for-in, хотя оба надо перебирать обычным циклом for?
Ответить с цитированием
  #10 (permalink)  
Старый 27.04.2011, 13:49
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

размерность массива определяется из свойства массив.length. Если искомый элемент находится на фиксированном месте - нет нужды перебирать весь массив - обратитесь к нему напрямую. А массивы достаточно перебирать в большинстве случаев циклом for:
Код:
for (var i = 0; i < data.length; i++) ...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск