推送数据时遇到问题。我想为绘图(Dygraphs)准备数据(时间,温度,湿度)。但是当我用这一个代码填充可变数据时(见下文)我得不到图表。
for (var i = 0; i < time.length; i++){
var t = new Date (time[i]);
data.push(t);
for(var n = 0; n < 2; n++){
data.push([data_graph[n][i]]);
}
}
但是当我离开一个for-cycle并手动编写数组的数据时(见下文),它可以工作,我得到图形。
for (var i = 0; i < time.length; i++){
var t = new Date (time[i]);
data.push([t,data_graph[0][i],data_graph[1][i]]);
}
我有想法使用临时变量,但也没有成功。
for (var i = 0; i < time.length; i++){
var data_temporary = [];
var t = new Date (time[i]);
for(var n = 0; n < 2; n++){
data_temporary.push([data_graph[n][i]]);
}
data.push([t,data_temporary]);
}
所以我的问题是......哪里可能有问题? 提前感谢您的回答。
答案 0 :(得分:1)
是的,您的三个代码段会生成三种不同的data
结构:
[t, [datagraph…], [datagraph…], t, [datagraph…], [datagraph…], …]
[[t, datagraph…, datagraph…], [t, datagraph…, datagraph…], …]
[[t, [[datagraph…], [datagraph…]]], [t, [[datagraph…], [datagraph…]]], …]
你经常推动单元素数组,顺便说一句。
因此,如果您想要循环生成的struc#2,请使用
for (var i=0; i<time.length; i++) {
var t = new Date (time[i]);
var temp = [t]; // or temp=[]; temp.push(t);
for (var j=0; j<data_graph.length; j++) // or j<2 if that's certain
temp.push(data_graph[j][i]);
data.push(temp);
}
答案 1 :(得分:0)
第二个(工作)版本根据需要在第一维中创建一个二维数组,其中time.length
个元素包含三个元素[t, x, y]
。
在第一个版本中,您正在创建一维数组[t0, [x0], [y0], t1, [x1], [y1], ...]
。
您的第三个版本不起作用,因为在第一维中正确创建time.length
元素时,元素本身为[t, [[x], [y]]]
,而不是[t, x, y]
。
答案 2 :(得分:0)
每次调用push()都会在data
数组中创建一个新元素。因此,在第一个示例中,您在外部for
循环的每次迭代中传递3个对象,而在第三个示例中,您传递的是包含time和两个值数组的对象。但是dygraph脚本显然希望对象由三个元素组成,所以你的第二个例子可以工作。