在 vue-chartjs 中循环遍历数组

Posted

技术标签:

【中文标题】在 vue-chartjs 中循环遍历数组【英文标题】:Loop through array in vue-chartjs 【发布时间】:2019-09-04 04:32:40 【问题描述】:

我正在使用 Laravel 5.7 并且一直在使用 vue-chartjs。

预期结果:

我想将一个数组传递给Vue并循环遍历特定值以动态创建图表。

我一直在尝试的:

我有以下数组:

0 => array:4 [▼
  "order_date" => "2019-04-01"
  "days_remaining" => 29
  "cash_remaining" => 26714.63
  "ratio" => "1.11"
]
1 => array:4 [▼
  "order_date" => "2019-04-02"
  "days_remaining" => 28
  "cash_remaining" => 26184.61
  "ratio" => "1.41"
]

我正在使用刀片中的 :bind shorthand 将数组传递给我的 Vue 组件。

:chart-data=" json_encode($array) "

我正在阅读有关 using a sequential for loop 的信息,但每当我尝试添加 for 循环时,都会收到 Uncaught Error: Module build failed: SyntaxError: Unexpected token (19:11) 错误。

<script>
import  Line  from 'vue-chartjs' 

export default 
  extends: Line,
  props: ['chartData'],

  mounted() 
    console.log(this.chartData); // This works
    var length = this.chartData.length; // So does this

    this.renderChart(
      labels: ['Ratio Value'],

      // This produces the error listed above
      for ( var i = 0; i < length; i++ )
      
        console.log(chartData[i]);
      

      datasets: [
        // I want to dynamically produce the following
        
          label: [chartData.order_date],
          data: chartData.ratio
        
      ]
    )
  

</script>

数组长度恒定为 5,因此我可以将它们的值存储在刀片模板中的隐藏输入中并使用 document.querySelector,但这似乎很笨重,不是最佳路线。

任何建议将不胜感激!

【问题讨论】:

为什么不在mounted() 中循环this.cartData?我在这里没有看到问题。 嘿@Camilo,首先,感谢您的回复。这就是我苦苦挣扎的地方 - 我知道我 需要 循环遍历数组,我只是不确定 如何 这样做。您可以发布一个显示示例的答案吗?我是 php / Laravel 人 - JS 不是我的强项。 您链接的问题回答了该问题,您应该尝试在您的 mounted() 函数中使用 for() Loop through an array in javascript的可能重复 @Camilo - 如果它回答了我不会问的问题。每当我回答关于 SO 的问题时,我通常都会举一个例子,以便人们学习。这不是网站的全部意义吗?分享知识? 【参考方案1】:

将您的for() 移出renderChart() 呼叫:

import  Line  from 'vue-chartjs'

export default 
  extends: Line,
  props: ['chartData'],

  mounted() 
    var length = this.chartData.length;
    var array = this.chartData;

    // Create new arrays to store the data
    var ratioArray = [];
    var labelsArray = [];

    for ( var i = 0; i < length; i++ ) 
      // Then push our data to the new arrays
      labelsArray.push(array[i] ? array[i].order_date : '');
      ratioArray.push(array[i] ? array[i].mbr : '');
    

   this.renderChart(
      labels: labelsArray, // Reference our new labelsArray
      datasets: [
        
          label: 'Ratio',
          data: ratioArray, // And our new ratioArray
        
      ]
    )
  

initializing objects时不能调用函数。

【讨论】:

我会将此答案标记为已接受,因为您帮助我指明了正确的道路。我对其进行了编辑以包含组件 re: 将数据推送到新数组。非常感谢您今天的宝贵时间,非常感谢!

以上是关于在 vue-chartjs 中循环遍历数组的主要内容,如果未能解决你的问题,请参考以下文章

PHP中如何使用foreach结构遍历数组?

js的Dom对象集合循环遍历过程中数组长度发生变化,小白不懂,求大神指教

jquery数组封装使用方法分享(jquery数组遍历)

jquery 如何遍历循环数组

在Javascript中循环遍历数组的元素[重复]

怎样用for循环动态遍历json数组