2015-04-10 6 views
0
getBrand: function(brandId) { 
    for(var i=0; i<malls.length; i++) { 
    for(var j=0;j<malls[i].brands.length; j++){ 
     //console.log(malls[i][brands[j]); 
     //console.log(malls[i].brands[j].id); 
     if(malls.brands[j].id==(brandId)){ 
     console.log(malls.brands[j].id); 
     return malls.brands[j].id; 
     } 
    } 
    } 
} 

мне нужна помощь, пожалуйста, и в моей консоли я получаю сообщение: TypeError: Не удается прочитать свойство «0» неопределеннойНе удается прочитать свойство «0» неопределенной

+7

Не должно быть 'malls [i] .brands [j] .id'? – undefined

+0

@Vohuman опубликуйте это как ответ ... – rfornal

+0

Ха, это происходит со мной все время, когда я забываю указать индекс после вызова метода getElementsByClassName или 'getElementsByTagName' или' querySelectorAll' ... – Xufox

ответ

1

Кажется, у вас есть массив объектов и каждый объект имеет свойство brands, которое содержит массив объектов. Ваш второй цикл for предполагает, что массив malls имеет свойство brands, что неверно. Поскольку malls.brands - undefined, вы получаете эту ошибку.

Изменение:

if (malls.brands[j].id==(brandId)) { 

к:

if (malls[i].brands[j].id==(brandId)) { 
+0

Спасибо, что сделал! – Bobox

0

, как @Vohuman заостренные, я думаю, вы должны написать для того, чтобы получить доступ к массиву brands внутри объекта malls[i]malls[i].brands[j], в противном случае вы обращаетесь к целому malls массив объектов, который не имеет свойства brands

getBrand: function(brandId) { 
    for(var i=0; i<malls.length; i++) { 
    for(var j=0;j<malls[i].brands.length; j++){ 
     if(malls[i].brands[j].id==(brandId)){ 
     console.log(malls[i].brands[j].id); 
     return malls[i].brands[j].id; 
     } 
    } 
    } 
} 
0

Вы должны быть в состоянии сделать это и избегать суеты.

for(var mall of malls) { 
    for(var brand of mall) { 
     if(brand.id == brandId) return brand.id; 
    } 
} 
Смежные вопросы