2013-12-05 3 views
1

У меня есть массив Javascript, который содержит содержимое страницы. Чтобы рисовать все объекты в нужных местах, когда страница загружается, я петлю по массиву и вытаскиваю элементы. Это работало очень хорошо, пока я не разрешил объектам иметь детей внутри них.JS для остановки цикла после вызова функции

Существующая структура массива 0-> {elements=[] frame={I keep the frame attributes here with key value pairs}}, 1-> {elements=[] frame={}}

Тем не менее, я только начал добавлять суб-элементов в массиве элементов в каждом объекте. Итак, теперь мне нужно перебирать/рисовать каждый элемент, проверять, есть ли какие-либо дети, и если да, тогда мне тоже нужно их нарисовать.

Проблема, с которой я столкнулась, заключается в том, что после того, как я пропустил первый объект 0 и его дети, цикл for перестает работать. Это потому, что я вызываю одну и ту же функцию несколько раз? Я сделал это раньше, поэтому не думаю, что это то, что происходит.

this.run_loop = function (spawn, dom) { 
    console.log(spawn) 
    alert(spawn.length) 
    for (i = 0; i < spawn.length; i++) { 
     console.log(spawn[i]) 
     //alert("i one")  
     var newdom = dom + "_" + i; 
     this.synthesize_elements(spawn[i], dom, newdom) 
     if (spawn[i].hasOwnProperty('elements')) { 
      //alert("FOUND") 
      var newarray = spawn[i]['elements']; 
      if (newarray.length > 0) { 
       this.run_loop(newarray, newdom) 
      } 
     } 
    } 
} 
+0

Если вы открываете консоль, она показывает какие-либо ошибки во время выполнения? –

+0

Нет. Это просто не работает. Если я прокомментирую this.run_loop (newarray, newdom), он отлично справляется с двумя верхними массивами. Только когда я зацикливаю его на дочерние массивы, у меня есть проблема – centreee

+3

Не могли бы вы создать минимальный полный пример, демонстрирующий вашу проблему? Я не могу проверить ваш код, потому что вы ссылаетесь на функции, которые не определены в вашем примере. –

ответ

0

Это немного старый, но я столкнулся с аналогичной проблемой и нашел свой путь здесь, но я понял это и думал, что я отправлю решение, если кто-то сталкивался с этим. Проблема в моем случае (и это выглядит, как в вашем случае, как хорошо, хотя я не могу быть уверен) был в объявлении для цикла:

for (i = 0; i < spawn.length; i++) 

Вы не объявляя, что я новый вар , так что если что-нибудь внутри функции

this.run_loop(newarray, newdom) 

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

просто всегда заявляет:

for (var i; i< spawn.length; i++) 

в ваших петлях или убедитесь, что ваши счетчики являются уникальными.

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