2014-10-25 3 views
3

Im пытается скомпилировать все мои массивы внутри объекта, а затем проверить, имеет ли объект внутри массива набор imageUrl, если нет. Затем установите значение по умолчанию.Looping object arrays

портфолио [i] возвращается не определено.

that.portfolio = { 
    applications = [ 
     { imageUrl: "" } 
    ], 
    websites = [ 
     { imageUrl: "" } 
    ] 
} 

var setDefaultImage = function() { 
       var portfolio = that.portfolio; 
       var defaultImageUrl = "App/Main/images/shared/defaultImg64x64.png"; 

       for (var i = 0; i < Object.keys(portfolio).length; i++) 
        portfolio[i].forEach(function (currentObj) { 
         if (!currentObj.imageUrl) { 
          currentObj.imageUrl = defaultImageUrl; 
         } 
        }); 
      } 

ответ

0

portfolio является объектом не является массивом, поэтому правильный способ цикла было бы for-in цикл:

for (var key in portfolio) { 
    portfolio[key].forEach(function(currentObj) { 
     if (!currentObj.imageUrl) { 
      currentObj.imageUrl = defaultImageUrl; 
     }  
    }); 
} 

Как вы можете видеть, нет необходимости overthink здесь с Object.keys(portfolio) однако вы можете использовать его также, если вы хотите:

var keys = Object.keys(portfolio); 
for (var i = 0; i < keys.length; i++) { 
    portfolio[keys[i]].forEach(function (currentObj) { 
     if (!currentObj.imageUrl) { 
      currentObj.imageUrl = defaultImageUrl; 
     } 
    });  
}