在 for 循环 returns 未定义中访问 javascript 对象
Accessing a javascript object within a for loop returns undefined
我试图在 for 循环中访问嵌套的 javascript 对象。第一级对象显示得很好,但第二级子对象显示为未定义。但是,如果我在循环外执行此操作,对对象访问进行硬编码,它就可以正常工作。这是怎么回事?
这是我要访问的对象:
var groups = {
"group1": {
"sum": 25,
"count": 5
},
"group3": {
"sum": 5,
"count": 5
}
}
您使用for ... in
The for...in
statement iterates over the enumerable properties of an object, in arbitrary order. For each distinct property, statements can be executed.
这会为您提供一个带有您正在迭代的对象键的变量。
然后你需要access对象的权利,而不是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);
}
如果你在循环中执行 console.log(group)
你会发现在每次迭代中 group
变量不是你想要的 object
但它是一个简单的字符串 - key
groups
个对象。然后,您将通过循环内的 groups[group]
访问正确的对象。
编辑
为了确保您将获得正确的结果,我建议您在每次迭代时在循环内执行一些验证
if ( groups.hasOwnProperty(group) ) {
// perform operation
}
根据文档
The hasOwnProperty() method returns a boolean indicating whether the object has the specified property.
我试图在 for 循环中访问嵌套的 javascript 对象。第一级对象显示得很好,但第二级子对象显示为未定义。但是,如果我在循环外执行此操作,对对象访问进行硬编码,它就可以正常工作。这是怎么回事?
这是我要访问的对象:
var groups = {
"group1": {
"sum": 25,
"count": 5
},
"group3": {
"sum": 5,
"count": 5
}
}
您使用for ... in
The
for...in
statement iterates over the enumerable properties of an object, in arbitrary order. For each distinct property, statements can be executed.
这会为您提供一个带有您正在迭代的对象键的变量。
然后你需要access对象的权利,而不是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);
}
如果你在循环中执行 console.log(group)
你会发现在每次迭代中 group
变量不是你想要的 object
但它是一个简单的字符串 - key
groups
个对象。然后,您将通过循环内的 groups[group]
访问正确的对象。
编辑
为了确保您将获得正确的结果,我建议您在每次迭代时在循环内执行一些验证
if ( groups.hasOwnProperty(group) ) {
// perform operation
}
根据文档
The hasOwnProperty() method returns a boolean indicating whether the object has the specified property.