Проблема с рекурсией Javascript

#javascript #jquery #json #function #recursion

#javascript #jquery #json #функция #рекурсия

Вопрос:

У меня возникли проблемы с рекурсией javascript. Вот код

 _parseJson: function($object, $j_array) {

    for (i = 0; i < $j_array.length; i  ) {
        var $el = document_designer.createElement($j_array[i]);
        $object.append($el);
        if ($j_array[i].elements.length > 0) {
            this._parseJson($el, $j_array[i].elements);
        }
    }
}
  

Обе функции ( parseJson и createElement ) находятся под объектом с именем «document_designer». Вот createElement

 createElement: function(n) {
    var $element = $('<'   n['tag']   '/>');
    document_designer.oi  ;
    if (n.id == null) {
        $element.attr('id', '____element'   document_designer.oi);
    }
    document_designer.processElement($element, n); // you may ignore this line
    return $element;
}
  

У функции processElement нет проблем. Вы можете даже игнорировать эту строку

 document_designer._parseJson(document_designer.$preview, json_element)
// $preview is an created object in the `body`
  

и мой родительский JSON: http://www.jsoneditoronline.org/?id=c99c77938e5edf91996e4bb267fd09b1

Создаются корневые элементы и дочерние дочерние элементы first main, но дочерние элементы других корневых элементов не создаются

Комментарии:

1. В чем проблема, с которой вы столкнулись?

2. Создаются корневые элементы и дочерние дочерние элементы first main, но дочерние элементы других корневых элементов не создаются

3. @ahmetertem, пожалуйста, предоставьте образец вашего json.

4. @autoboxer jsoneditoronline.org/?id=c99c77938e5edf91996e4bb267fd09b1

5. @autoboxer Это по ссылке, которую он предоставил. Это действительно долго.

Ответ №1:

вы забыли var в

 for (i = 0; i < $j_array.length; i  ) {
  

Итак, вы используете один и тот же глобальный i для всех вызовов

изменить на:

  for (var i = 0; i < $j_array.length; i  ) {
  

Кстати, мне нравится ваш код.

Комментарии:

1. Спасибо, приятель. Я даже не думал, что это может быть… Я ценю это

2. @ahmetertem Представьте, что это происходит в большом JS-файле. Очень трудно найти.

3. Я опубликовал только проблемные части 🙂 В моем файле уже более 500 строк. Еще раз спасибо, чувак