嗨,我是一名学生,我从开发开始。我尝试使用chart.js制作直方图。 x是星期数,y是总和。为此,我编写此代码
function sumWeek(data) {
var week = new Date(data[0].dateHisto).getWeek();
var month = new Date(data[0].dateHisto).getMonth();
var year = new Date(data[0].dateHisto).getFullYear();
var table = [0, year, month, week];
var sum = 0;
for (var i = 0; i < data.length; i++) {
sum += parseInt(data[i].energy) / 1000;
}
table.splice(0, 1, sum);
tableWeek.push(table);
}
for (k = 1; k <= 52; k++) {
var resultW = dataH.filter(function(data) {
var date = new Date(data.dateHisto);
return date.getWeek() == k;
});
sumWeek(resultW);
}
我的问题:当一个星期没有数据时,控制台会写
index.php?page=history_currently:11606 Uncaught TypeError: Cannot read property 'dateHisto' of undefined
at sumWeek (index.php?page=history_currently:11606)
at createHistoWeek (index.php?page=history_currently:11640)
at index.php?page=history_currently:11414
编辑09/05:我不好,我没有很好地解释。暂时,一个星期没有数据,因此返回空的
[]
当我有数据时,我有
{energy: "19530", dateHisto: "2019-01-28"}
当数据为空时,该功能不起作用,并返回未捕获的typeError。而目前我还没有找到解决方案^^ Ty作为答案
答案 0 :(得分:0)
在代码的第二行中,将第一个元素从“数据”数组中取出。 如果数组为空或未定义,则没有第一个元素可以使用属性“ dateHisto”。
因此,您可以在函数的第一行中添加以检查是否收到任何输入。
if(!data || data.length < 1){
return
}
最好(!)的方法是在调用函数(!)之前检查是否有任何输入。
答案 1 :(得分:0)
以下行中的data.dateHisto
:var date = new Date(data.dateHisto);
未定义
以下代码上的resultW
:
var resultW = dataH.filter(function(data) {
var date = new Date(data.dateHisto);
return date.getWeek() == k;
});
是一个包含单个或多个不具有dateHisto
属性的元素的数组,或者包含它但其值为undefined