TypeScript中用于循环的数组中的未定义项

时间:2016-07-07 08:01:58

标签: javascript arrays typescript angular

当我在某些REST服务上设置匿名回调函数时,我得到了一个非常奇怪的行为,如果我只是console.log REST服务的结果,我得到预期的有效负载(一组对象)。但是,当我在同一个数组上运行循环并尝试获取某个键的值时,我收到错误,因为该项目显然是undefined

...
callback: (result) => {
    console.log(result); // outputs [{text: 'foo'}, {text: 'bar'}]
    for(let item of result){
        console.log(item.text); // error can't read text of undefined
        console.log(item); // HOWEVER... this works... :/
    }
}

有什么想法吗?必定会出现某种异步行为,但我无法弄清楚。

谢谢!

2 个答案:

答案 0 :(得分:2)

你很可能有一个格式错误的数组。以下是一个演示此问题的示例:

"users": {
  "6179eb29-9691-4828-be5a-28a94e84703b": {
    "-KLWoGzjymD0Sgvf5Rcs": {
      "email": "jaycarter@gmail.com",
      "lastname": "cater",
      "username": "jay"
    }
  },
  "6a210785-0a73-4c83-b3e1-d3828f9d8a3b": {
    "-KLqMiLTB71dTh7PrVpL": {
      "email": "k@gmail.com",
      "lastname": "john",
      "username": "smith"
    }
  }

修复

  • 过滤掉空白物品。

更多提示

  • console.log会为不合理的东西打印一个空行。您可能没有在调试中看到这一点
  • 阅读JavaScript数组漏洞
  • 享受生活

答案 1 :(得分:1)

这不是你如何迭代数组。您应该使用完整的for循环或forEach函数:

for(let i = 0, l = result.length; i < l; i++) {
    console.log(result[i].text);
 }

result.forEach((item) => {
   console.log(item);
});