如何在Chart.js(JS)中使用for循环动态调用函数

时间:2019-01-28 15:40:14

标签: javascript for-loop chart.js

我有一个问题: 我正在使用chart.js,并且尝试使用 for循环进行迭代,并在每个循环上调用不同的函数。

这是我的意思:

那是我的功能:


    const courbeSatisfactionserv = document.getElementById("courbe-satisfaction-service-chart");


    if (courbeSatisfactionserv) {
      const courbe_satisfaction_serv = new Chart(courbeSatisfactionserv, {
        type: 'line',
        data: {
            labels: createLabelsCourbe(date),
            datasets: function() {
              for (let i = 0; i < (courbeSatisfactionserv.dataset.size); i++) {
                return {
                  datalabels: {
                    display: false,
                  },
                  label: JSON.parse(courbeSatisfactionserv.dataset.?),
                  data: JSON.parse(courbeSatisfactionserv.dataset.?),
                  fill: false,
                  borderColor: '#442B48',
                  backgroundColor: '#442B48',
                  borderWidth: 2
                }
              }
            }
          },
        options: {
          scales: {
            xAxes: [{
               gridLines: {
                  display: false
               }
            }],
            yAxes: [{
                ticks: {
                    suggestedMin: 0,
                    suggestedMax: 10
                },
                gridLines: {
                drawBorder: false,
                display: false
                }
            }]
          }
        }
      });
    }

我想做的是让datalabel基本上这样称呼:

label: JSON.parse(courbeSatisfactionserv.dataset.points_lab_0),
data: JSON.parse(courbeSatisfactionserv.dataset.points_0),

对于第一次迭代,points_lab_1points_1对于第二次迭代,依此类推...

我尝试过:

label: JSON.parse(courbeSatisfactionserv.dataset.this["points_lab_"+i]),
data: JSON.parse(courbeSatisfactionserv.dataset.this["points_"+i]),

但这不起作用

谢谢!

1 个答案:

答案 0 :(得分:0)

因为主体包含一个return,所以for循环永远不会超出第一次迭代。要返回所有迭代产生的数组,请创建一个数组变量,将其推送到循环中,然后返回该数组...

        datasets: function() {
          let labelObjects = [];
          let dataset = courbeSatisfactionserv.dataset; // easier on the eyes
          for (let i = 0; i < (dataset.size); i++) {
            let labelObject = {
              datalabels: {
                display: false,
              },
              label: JSON.parse(dataset[`points_lab_${i}`]),
              data: JSON.parse(dataset[`points_${i}`]),
              fill: false,
              borderColor: '#442B48',
              backgroundColor: '#442B48',
              borderWidth: 2
            }
            labelObjects.push(labelObject);
          }
          return labelObjects;
        }