在 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
  }
}

明白我的意思:https://jsfiddle.net/97o1jme2/

您使用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.