Цикл Javascript через массив завершается посередине

#javascript #arrays #function #loops #return

#javascript #массивы #функция #циклы #Возврат

Вопрос:

у меня есть массив, который я пытаюсь выполнить с помощью array.length, но он останавливается в середине цикла без причины.

код :

     var id = ['88' , '89' , '90' , '91' , '92' , '93' , '94' , '95' , '96' , '97' , '98' ];
    var parent_id = ['1' , '1' , '88' , '1' , '88' , '91' , '93' , '93' , '92' , '90' , '97' ];

    function getAllLearningPaths(id){


    document.getElementById("catdiv").innerHTML  = "THIS IS HE CURRENT CATEGORY ID : "   id       "<br>"; 
    for(var i=0; i < id.length;i  )
    {
    document.getElementById("catdiv").innerHTML  = "THIS IS HE CURRENT CATEGORY  PARENT    ID : "   parent_id[i]   "<br>"; 
    if(parent_id[i] == id amp;amp; id[i] != id)
    {
      document.getElementById("catdiv").innerHTML  = "I MADE IT!";
      getAllLearningPaths(parent_id[i]);


    }    
}

for(var i=0; i< Categories.length;i  )
{
    if(Categories[i] == id)
    {
        document.getElementById("l_ids_" CategoriesValues[i]).checked = true;
       disablerow(document.getElementById("l_ids_" CategoriesValues[i]), '1');


    }

}           

return;
}
  

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

ЭТО ЕГО ТЕКУЩИЙ ИДЕНТИФИКАТОР КАТЕГОРИИ: 88, ЭТО ЕГО ТЕКУЩИЙ идентификатор РОДИТЕЛЯ КАТЕГОРИИ: 1, ЭТО ЕГО ТЕКУЩИЙ идентификатор РОДИТЕЛЯ КАТЕГОРИИ: 1

есть идея?

Ответ №1:

Эта строка выглядит неправильно —

 if(parent_id[i] == id amp;amp; id[i] != id)
  

parent_id выглядит как массив целых чисел, поэтому id переменная должна быть int, чтобы пройти этот тест. Затем вы ссылаетесь на i как на массив в следующей части инструкции if — id[i] != id .

Ответ №2:

похоже, что это может быть эта строка if(Categories[i] == id) вы проверяете значение в категориях перед массивом id, должны ли вы проверять индекс внутри id?

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

1. id — это параметр, предшествующий этой функции

Ответ №3:

Должно быть выдано исключение. Вместо того, чтобы пытаться выяснить, в чем проблема в вашем коде, вам следует добавить обработку исключений (используйте try catch) и отладить ее с помощью firebug

Ответ №4:

 if(parent_id[i] == id amp;amp; id[i] != id)
  

В вашей функции ‘id’ ссылается на parent_id, потому что это аргумент, который вы передали функции.

Прерывание этой строки означает:

 if(parent_id[i] == parent_id amp;amp; parent_id[i] != parent_id)
  

Я бы предложил либо переименовать вашу переменную-аргумент, либо массив идентификаторов.

Ответ №5:

Кажется, что ваш цикл выполняется дважды. Я предполагаю, что вы передаете строку типа ’88’ для параметра id. Таким образом, он возвращает 2 для id.длина, поскольку идентификатор является строкой.