Chart.js -如何更动态地编写此Javascript

mitkmikd  于 2023-03-12  发布在  Chart.js
关注(0)|答案(1)|浏览(110)

我是Chart.js的新手,也没有编写javascript的经验。我目前已经编写了一个4行图表,但我想让代码更动态一点,这样如果输入的数据发生变化(比如出现了第5个类别),JS代码就可以接收到,而不必重写。

Chart.js代码和html

const ctx = document.getElementById('myChart');

        const data = JSONinput;

        new Chart(
            ctx,
            {
                type: 'line',
                data: {
                    labels: data.map(row => row.DataPoints.map(p => p.LogDate))[0],
                    datasets: [
                        {
                            label: data.map(row => row.Name)[0],
                            data: data.map(row => row.DataPoints)[0].map(k => k.Score)
                        },
                        {
                            label: data.map(row => row.Name)[1],
                            data: data.map(row => row.DataPoints)[1].map(k => k.Score)
                        },
                        {
                            label: data.map(row => row.Name)[2],
                            data: data.map(row => row.DataPoints)[2].map(k => k.Score)
                        },
                        {
                            label: data.map(row => row.Name)[3],
                            data: data.map(row => row.DataPoints)[3].map(k => k.Score)
                        }
                    ]
                }
            };
<div>
    <canvas id="myChart"></canvas>
</div>

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

JSON输入

[
    {
        "Name": "Red",
        "DataPoints": [
            {
                "LogDate": "2023-02-19T13:07:13.643",
                "Score": 478.5
            },
            {
                "LogDate": "2023-03-01T23:13:04.45",
                "Score": 594.0
            }
        ]
    },
    {
        "Name": "Blue",
        "DataPoints": [
            {
                "LogDate": "2023-02-19T13:07:13.643",
                "Score": 546.5
            },
            {
                "LogDate": "2023-03-01T23:13:04.45",
                "Score": 657.0
            }
        ]
    },
    {
        "Name": "Green",
        "DataPoints": [
            {
                "LogDate": "2023-02-19T13:07:13.643",
                "Score": 687.0
            },
            {
                "LogDate": "2023-03-01T23:13:04.45",
                "Score": 757.0
            }
        ]
    },
    {
        "Name": "Purple",
        "DataPoints": [
            {
                "LogDate": "2023-02-19T13:07:13.643",
                "Score": 518.0
            },
            {
                "LogDate": "2023-03-01T23:13:04.45",
                "Score": 668.0
            }
        ]
    }
]

另外,如果有一种缩短日期时间的方法,使它只显示日期组件,那么这将是伟大的太,谢谢。

3bygqnnd

3bygqnnd1#

假设你的data和你想要的dataset一样长,你可以这样做;

const ctx = document.getElementById('myChart');

const data = JSONinput;

const datasets = data.map(row => ({
    label: row.Name,
    data: row.DataPoints.map(k => k.Score)
}));

new Chart(
    ctx,
    {
        type: 'line',
        data: {
  // The map on this line was not necessary
            labels: data[0].DataPoints.map(p => p.LogDate),
            datasets
        }
    });

传递到图表中的数据最终显示为:

{
   "type":"line",
   "data":{
      "labels":[
         "2023-02-19T13:07:13.643",
         "2023-03-01T23:13:04.45"
      ],
      "datasets":[
         {
            "label":"Red",
            "data":[
               478.5,
               594
            ]
         },
         {
            "label":"Blue",
            "data":[
               546.5,
               657
            ]
         },
         {
            "label":"Green",
            "data":[
               687,
               757
            ]
         },
         {
            "label":"Purple",
            "data":[
               518,
               668
            ]
         }
      ]
   }
}

相关问题