前言:我对chart.js非常陌生,所以这可能是缺乏基础知识
我有两个async函数:一个用来构建图表,一个用来准备数据。
这在窗口加载后被调用:
async function chartIt() {
const ctx = document.getElementById('myChart').getContext('2d');
const globalVar = await getData();
const myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: globalVar.xlabels,
datasets: [
{
label: 'Sign Ups',
data: globalVar.ylabels,
fill: false,
borderColor: 'rgba(255, 99, 132, 1)',
backgroundColor: 'rgba(255, 99, 132, 0.5)',
borderWidth: 1
}
]
},
options: {}
});
}
第二个async函数:
async function getData() {
const response = await fetch('stats.csv');
const data = await response.text();
const xlabels = [];
const ylabels = [];
const rows = data.split(/\n/);
rows.forEach(row => {
const cols = row.split(',');
rows.push(cols);
console.log(cols);
xlabels.push(cols[0])
ylabels.push(cols[1])
});
console.log('xlabels: ' + xlabels);
console.log('ylabels: ' + ylabels);
console.log (rows)
return { xlabels, ylabels };
};
日志返回了一些奇怪的结果,如下所示:screenshot of console logs
Table in HTML
为什么我的标签和数据被作为每个数组中1个值的组合放入?为什么它只停在其中的一个?
任何帮助都是感激不尽的。谢谢你,谢谢
已尝试将数字设置为单个值而不是数组。没有显示任何结果。
1条答案
按热度按时间gcuhipw91#
我不相信这与chartjs有任何关系--getData函数中的代码对我来说非常奇怪。
具体而言,本节:
我不确定您期望数据以什么格式输出,但是您在
rows
的每个元素上运行的forEach函数中向rows
数组添加了更多的条目-这种半迭代、半递归的行为似乎是一个错误,并且导致两个数组各有1个标签和1个值。在不知道如何格式化stats.csv文件的情况下,很难给予比这更有用的建议。Chart.js本质上需要一个标签数组和一个值数组。您当前正在控制台记录的内容并非如此。