2016-05-20 2 views
-1

Я хочу перебрать два массива, штатов и районов, но я получаю сообщение об ошибке «Не могу прочитать длину свойства« неопределенного ». Я не знаю, что вызывает это.Итерация двух массивов: Невозможно прочитать свойство 'length' undefined

Это мой код:

var estados = [ "aguascalientes", "baja-california", "baja-california-sur", 
       "yucatan", "zacatecas", ]; 
var municipios = [ [ "aguascalientes", "asientos", "calvillo", "cosio", "tepezala" ], 
        [ "mexicali", "playas-de-rosarito", "ensenada" ] ]; 

$("#property_location").change(function() { 
    $("#property_location option:selected").each(function() { 
     var i; 
     var j; 
     for (i = estados.length - 1; i >= 0; i--) { 

      if ($(this).val() == estados[i]) { 
       console.log(estados[i]); 

       for (j = municipios[i].length - 1; i >= 0; i--) { 
        $("#property_municipio option[value='"+municipios[i][j]+"']").show();  
       } 

      } else { 

       for (j = municipios[i].length - 1; i >= 0; i--) { 
        $("#property_municipio option[value='"+municipios[i][j]+"']").hide();  
       }  
      } 
     } 
    }); 
}).change(); 
+2

, пожалуйста, добавьте массивы, которые вы итерируете. –

+0

Являются массивы: вара Estados = [ "Aguascalientes", "бах-Калифорния", "бах-калифорнийская сюр", "Юкатан", "Сакатекас", ]; вар municipios = [ [ "Aguascalientes", "asientos", "Калвильо", "Cosio", "Тепесала" ], [ "Мехикали", "Playas-де-Rosarito" , "ensenada" ] ]; –

ответ

1

Ваша проблема заключается в том, что estados имеет больше член чем municipios вас петля корыта каждый член estados и проверить, сколько член делает массив municipios суб есть.

for (j = municipios[i].length - 1; i >= 0; i--) 

если i больше 1municipios[i] не определено, и вы не можете вычислить длину не определено. это порождает вашу ошибку.

Кстати, вы переписываете свой индекс цикла i, если вы используете его в обоих циклах. Пожалуйста, используйте его так:

for(var i = 0; i < array.length; i++){ 
    ... 
    for(var j = 0; j < array.length; j++){ 
     ... 
    } 
} 
+0

Ты классный. Спасибо. –

0

Первый/верхний массив с 5 элементов, как я вижу, в то время как второй municipios массив будет иметь 2 элементов (конечно вложенные списки, имеющие данные, но фактическое длина будет равна 2, так как она содержит только 2 списка). Хотя внешний цикл работает нормально, проблема связана с внутренним циклом. Когда я достигаю больше 2, предположим, что 3, код пытается извлечь третий элемент из массива municipios, который даже не существует. Более того, он пытается получить доступ к длине определенных элементов.

+0

Большое спасибо. Моя проблема решена. –

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