【问题标题】:Loop through an Array in Typescript在 Typescript 中循环遍历数组
【发布时间】:2020-11-24 16:29:39
【问题描述】:

Angular 连接到从 mongodb 获取数据的 node.js。 这工作正常,但现在我需要将 typescript 组件中的变量映射到后端 node.js。

在浏览器控制台中,数据结构如下所示: Browser Console

The code within the component.ts looks like this:
ngOnInit() {
    this.contactService.getContacts()
      .subscribe(res => {
        console.log(res);

          let temp_max = res[0]['list'].map(res => res.main.temp_max)
          let temp_min = res[0]['list'].map(res => res.main.temp_min)
          let alldates = res[0]['list'].map(res => res.dt)

          let deviceData = []
          alldates.forEach((res) => {
            let jsdate = new Date(res * 1000)
            deviceData.push(jsdate.toLocaleTimeString('en', { year: 'numeric', month: 'short', day: 'numeric' }))
          })
          console.log(deviceData)
        })
  
}

现在我写了let temp_max = res[0]['list'].map(res => res.main.temp_max),但是如何将 [0] 替换为“i”,打字稿中的正确语法是什么?

我试过(下面的代码)并得到一个错误:

ngOnInit() {
    this.contactService.getContacts()
      .subscribe(res => {
        console.log(res);
        for (var i = 0; res.length; i++) {
          let temp_max = res[i]['list'].map(res => res.main.temp_max)
          let temp_min = res[i]['list'].map(res => res.main.temp_min)
          let alldates = res[i]['list'].map(res => res.dt)

          let deviceData = []
          alldates.forEach((res) => {
            let jsdate = new Date(res * 1000)
            deviceData.push(jsdate.toLocaleTimeString('en', { year: 'numeric', month: 'short', day: 'numeric' }))
          })
          console.log(deviceData)
        })
      }
}

请帮助我 :) 解决我的问题。谢谢伊甸园

【问题讨论】:

  • and get an error 什么错误?
  • 查看您的for 条件,如果您的数组中有任何项目,您将获得无限循环

标签: javascript node.js angular typescript


【解决方案1】:

您的循环的结束条件部分缺失:

for (let i = 0; i < res.length; i++)

【讨论】:

    【解决方案2】:

    别忘了 forEach 也可以有一个迭代器:

    res.forEach((resItem, i) =&gt; {

    https://www.w3schools.com/jsref/jsref_foreach.asp

    【讨论】:

    • 嗨,克里斯,欢迎来到 stackoverflow。在这种情况下,我们最好给出一个可行的解决方案,而不是仅仅建议使用某些东西。
    【解决方案3】:

    您可以简单地循环 res 然后 list 来实现这一点,无需任何 for 循环。

    const temp_max = res.map((r) => r.list.map((list) => list.main.temp_max));
    const temp_min= res.map((r) => r.list.map((list) => list.main.temp_min));
    const alldates = res.map((r) => r.list.map((list) => list.dt));
    
    console.log(temp_max, temp_min, alldates)
    

    【讨论】:

    • 感谢卡姆兰!是的,这是一个如何映射变量的好主意
    • 如果它有效,那么你能接受这个答案吗?
    猜你喜欢
    • 1970-01-01
    • 2021-08-27
    • 2018-10-09
    • 1970-01-01
    • 2020-04-30
    • 2014-06-04
    • 1970-01-01
    相关资源
    最近更新 更多