JSON:
var promiseObj = {
"physical": [],
"virtual": []
}
var config = {
"Environments": [
"LH5",
"LH8",
"AMS"
],
"Clusters": {
"LH5": 4,
"LH8": 4,
"AMS": 4
}
};
所以我试图根据上面给定JSON对象中的环境和集群设置不同的promise对象。
for (var i = 0; i < config.Environments.length; i++) {
promiseObj.physical[config.Environments[i]][config.Clusters[config.Environments[i]]] = $http.get('URL').success(function(data) {
//Successful stuff here
});
}
然而,当执行此for循环时,我收到以下错误:
promiseObj.physical[config.Environments[i]] is undefined
当有人在文档的开头明确定义对象时,是否有人可以了解为什么返回undefined?
答案 0 :(得分:1)
您将physical
声明为数组,然后将其作为对象进行访问,因此您尝试访问不存在的属性。
尝试按如下方式声明physical
:
"physical": {}
答案 1 :(得分:1)
由于physical
是一个空数组,因此其中的所有键都是undefined
。您需要在第一次使用它们时填充它们:
if (typeof promiseObj.physical[config.Environments[i]] == 'undefined') {
promiseObj.physical[config.Environments[i]] = {}; // or [], whichever you want
}
promiseObj.physical[config.Environments[i]][config.Clusters[config.Environments[i]]] = ...
答案 2 :(得分:1)
这是因为promiseObj.physical[]
是一个空数组,你必须在之前初始化你想要的索引:
for (var i = 0; i < config.Environments.length; i++) {
if(!promiseObj.physical[config.Environments[i]]) promiseObj.physical[config.Environments[i]] = {}; // Initialize it
promiseObj.physical[config.Environments[i]][config.Clusters[config.Environments[i]]] = $http.get('URL').success(function(data) {
//Successful stuff here
});
}