如何遍历fetch()的JSON响应,然后将其添加到图表数据?

时间:2020-03-05 04:29:52

标签: javascript json vue.js

我正在尝试从API获取JSON响应,然后将其添加到Chart.js图表​​中。 这是Vue组件的JS代码

import LineChart from './LineChart.js'
  export default {
      name: 'Chart',
      components: LineChart,
      data () {
        return {
          loaded: false,
          stockData: {
            labels: null,
            datasets: null
          }
        }
      },
      async mounted () {
        this.loaded = false
        try{
          const response = await fetch('http://localhost/AAPL')
          const stock = await response.json()
          console.log(stock)
          let annual = stock.Earnings.Annual
          for(let i of annual){
            this.stockData.labels.push(i.date)
            this.stockData.datasets.push(i.epsActual)
          }
          this.loaded = true
        } catch (e){
          console.error(e)
        }
      }
  }

但是我得到了错误

Chart.vue?36ee:38 TypeError: annual[Symbol.iterator] is not a function

还有其他方法可以将数据添加到图表中吗?

1 个答案:

答案 0 :(得分:1)

JavaScript有几种类型的循环。 annual最有可能是没有自定义迭代器的对象,这就是为什么收到此消息的原因。

1)for ... of用于循环遍历iterable objects,例如数组和其他类似数组的结构,或者定义了自定义迭代器的对象。

2)for ... in用于循环遍历对象键(和数组索引)。

尝试改用for ... in

for(let i in annual){
    this.stockData.labels.push(annual[i].date)
    this.stockData.datasets.push(annual[i].epsActual)
}