我正在尝试访问for循环中的嵌套javascript对象。第一级对象显示正常,但第二级子对象显示为未定义。但是,如果我在循环外执行此操作,对对象访问进行硬编码,则可以正常工作。发生了什么事?
这是我想要访问的对象:
var groups = {
"group1": {
"sum": 25,
"count": 5
},
"group3": {
"sum": 5,
"count": 5
}
}
请参阅我的意思:https://jsfiddle.net/97o1jme2/
答案 0 :(得分:2)
您使用for ... in
for...in
语句以任意顺序迭代对象的可枚举属性。对于每个不同的属性,可以执行语句。
它为您提供了一个带有对象键的变量,您正在迭代。
然后您需要向对象access使用asynchronous for each loops,而不是group["sum"]
同时使用groups
的密钥。
groups[group]["sum"]
//^^^^^^^^^^^
或
groups[group].sum
//^^^^^^^^^^^
var groups = { group1: { sum: 25, count: 5 }, group3: { sum: 5, count: 5 } },
group;
for (group in groups) {
console.log("[Loop access] " + group + " - sum: " + groups[group].sum + " - count: " + groups[group].count);
}

答案 1 :(得分:1)
如果您在循环中执行console.log(group)
,您会发现在每次迭代时group
变量都不是您想要的object
,但它是一个简单的字符串 - key
groups
对象。然后,您将通过循环内的groups[group]
访问正确的对象。
修改强>
为了确保您获得正确的结果,我建议您在每次迭代时在循环内执行一些验证
if ( groups.hasOwnProperty(group) ) {
// perform operation
}
根据文件
hasOwnProperty()方法返回一个布尔值,指示对象是否具有指定的属性。