2016-11-17 2 views
-1

У меня есть следующий код JavaScript:Два типа цикла - как работает только один из них?

var controller = { 
initApp: function(){ 
    var getCartData = $.ajax({ url: '/cart' }), 
     getCategoryData = $.ajax({ url: '/categories' }), 
     getSupplierData = $.ajax({ url: '/suppliers'}), 
     getProdcuts = $.ajax({url: '/products'}); 

    // Main controller logic starts when all data are loaded in 
    $.when(getCartData, getCategoryData, getSupplierData, getProdcuts 
    ).done(function(cart, categories, suppliers, products) { 
     var model = new Model(cart, categories, suppliers, JSON.parse(products[0])); 

     console.log(model.products); 
     console.log(typeof model.products); 

     for(var i = 0; i<model.products.length; i++){ 
      console.log(model.products[i]); 
     } 

     for(product in model.products){ 
      console.log(product); 
     } 

    }); 
} 

};

Хотелось бы итерации через model.products. В конце кода я использую два типа циклов. Почему только один из них (первый) работает так, как ожидалось? Второй печатает числа в длине массива.

+2

Возможно, вы хотите использовать 'for ... of' вместо' for ... in' – Sirko

+0

Прочитать [для ... в | MDN] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...in) Вы повторяете свойства, а не значения. Затем прочитайте [для ... из | MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) –

ответ

0

Produkt является ключевым тоже:

a={a:1,b:2} 
for(key in a){ 
alert(key);// a. B. 
} 

Так что вам нужно сделать:

for(product in model.products){ 
console.log(model[product]); 
} 

Но вы должны использовать нормальный цикл. Зачем? Поскольку прототип также обрабатывается клавишами:

Array.prototype.test=2; 

Запускать петли кабины с этим кодом, выполненным ранее. Для in также будет echo 2, что вы не хотите ...

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