我有下面的数据,我试图使用Chart.js生成一个条形图。
const sampleData = {
"data1":[
{
"ng_fy":"2019/20",
"js":"[{\"cat_item\": \"Refurbrish NAGRIC & DB Semen Lab\", \"ng_value\": \"10\"}, {\"cat_item\": \"Semen Bulls Purchased\", \"ng_value\": \"7\"}, {\"cat_item\": \"No. Semen doses Procured\", \"ng_value\": \"8\"}, {\"cat_item\": \"No. of Sexed Embryos Procured\", \"ng_value\": \"9\"}, {\"cat_item\": \"Liquid nitrogen semen storage tanks procured\", \"ng_value\": \"11\"}]"
},
{
"ng_fy":"2020/21",
"js":"[{\"cat_item\": \"Refurbrish NAGRIC & DB Semen Lab\", \"ng_value\": \"5\"}, {\"cat_item\": \"Semen Bulls Purchased\", \"ng_value\": \"15\"}, {\"cat_item\": \"No. Semen doses Procured\", \"ng_value\": \"18\"}, {\"cat_item\": \"No. of Sexed Embryos Procured\", \"ng_value\": \"7\"}, {\"cat_item\": \"Liquid nitrogen semen storage tanks procured\", \"ng_value\": \"1\"}]"
},
{
"ng_fy":"2021/22",
"js":"[{\"cat_item\": \"Refurbrish NAGRIC & DB Semen Lab\", \"ng_value\": \"10\"}, {\"cat_item\": \"Semen Bulls Purchased\", \"ng_value\": \"13\"}, {\"cat_item\": \"No. Semen doses Procured\", \"ng_value\": \"11\"}, {\"cat_item\": \"No. of Sexed Embryos Procured\", \"ng_value\": \"6\"}, {\"cat_item\": \"Liquid nitrogen semen storage tanks procured\", \"ng_value\": \"14\"}]"
},
{
"ng_fy":"2022/23",
"js":"[{\"cat_item\": \"Refurbrish NAGRIC & DB Semen Lab\", \"ng_value\": \"25\"}, {\"cat_item\": \"Semen Bulls Purchased\", \"ng_value\": \"19\"}, {\"cat_item\": \"No. Semen doses Procured\", \"ng_value\": \"17\"}, {\"cat_item\": \"No. of Sexed Embryos Procured\", \"ng_value\": \"23\"}, {\"cat_item\": \"Liquid nitrogen semen storage tanks procured\", \"ng_value\": \"16\"}]"
}
]
}
<canvas id="bar_chart"></canvas>
我在循环数据和正确显示图表方面遇到问题。
我已经创建了fiddle,如您所见,呈现的信息不正确,并且没有显示过去两年的信息。
1条答案
按热度按时间x8goxv8g1#
因为分组错误而丢失数据。
我试着修复它,但是无法让它工作,所以我重新开始。让我来解释一下(下面的工作片段)。
您为
json
中的每个object
推送到dataset
中,但由于您使用分组字符,因此需要根据所有数据集的标签进行分组,我称之为dataLabel
,因此不是x轴,而是Refurbrish NAGRIC & DB Semen Lab
等由于您要处理的是编码的JSON,我们首先对其进行解码:
这个函数循环遍历
json
数组中的每一项,然后解码(JSON.parse()
),并使用reduce()
将object数组更改为如下所示的对象:现在我们可以开始创建ChartJS想要的数据集了:
首先,从我们拥有的第一个对象中获取
dataLabels
,然后循环这些对象,现在我们只需要在json
上循环(map()
)来获取所有的datalabel
(从上面),得到如下结构: