在for循环中访问javascript对象会返回undefined

时间:2017-02-21 14:32:56

标签: javascript json object nested traversal

我正在尝试访问for循环中的嵌套javascript对象。第一级对象显示正常,但第二级子对象显示为未定义。但是,如果我在循环外执行此操作,对对象访问进行硬编码,则可以正常工作。发生了什么事?

这是我想要访问的对象:

var groups = {
  "group1": {
    "sum": 25,
    "count": 5
  },
  "group3": {
    "sum": 5,
    "count": 5
  }
}

请参阅我的意思:https://jsfiddle.net/97o1jme2/

2 个答案:

答案 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()方法返回一个布尔值,指示对象是否具有指定的属性。