获取对象中对象的长度 - 最后一个元素未定义

时间:2018-06-09 04:35:16

标签: javascript typescript

使用Firebase,我正在拉一个数组:

var lists = 
[{
    "members": {
      "R2sZlOcWW3YZLi6B0sSLjNmoIix2": "true",
      "y0dKatD5onPtmdtElBpeYvYaIMq1": "true"
    }
  },
  {
    "members": {
      "R2sZlOcWW3YZLi6B0sSLjNmoIix2": "true",
      "y0dKatD5onPtmdtElBpeYvYaIMq1": "true"
    }
  },
  ......
]

使用

  var chatCount = 0;
  var multMembersCount = 0
  for (let i = 0; i < lists.length; i++) {
      let members = lists[i].members
      if (lists[i].chat) {
          chatCount += 1;
      }
      console.log(Object.keys(members).length)
  }

我正在使用Object.keys(members).length来查找每个成员对象的长度。日志成功写入控制台,但是,在循环结束时,我收到以下错误:

TypeError: undefined is not an object (evaluating 'Object.keys(members)')

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

使用“members ? Object.keys(members).length : 0”代替“Object.keys(members).length”。

如果0是意外(假的)项目,它将评估为members,如果不是,则评估为长度。

答案 1 :(得分:0)

修复是一个相对术语,因为没有迹象表明所需的行为是什么。避免出现错误消息的一种方法是将其解析为默认值:

console.log(Object.keys(members||{}).length)

membersundefined时,将使用对象{}