0

我在推送数据时遇到问题。我想为绘图(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 (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]);
 }

所以我的问题是......哪里可能有问题?提前感谢您的回答。

4

3 回答 3

1

是的,您的三个代码片段会生成三种不同的data结构:

  1. [t, [datagraph…], [datagraph…], t, [datagraph…], [datagraph…], …]
  2. [[t, datagraph…, datagraph…], [t, datagraph…, datagraph…], …]
  3. [[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);
}
于 2012-10-21T11:30:00.000 回答
0

第二个(工作)版本创建一个二维数组,time.length其中第一个维度中的元素[t, x, y]根据需要包含三个元素。

在第一个版本中,您正在创建一个一维数组[t0, [x0], [y0], t1, [x1], [y1], ...]

您的第三个版本不起作用,因为虽然您time.length在第一维中正确创建元素,但元素本身是[t, [[x], [y]]],而不是[t, x, y]

于 2012-10-21T11:28:31.167 回答
0

每次调用 push() 都会在data数组中创建一个新元素。因此,在您的第一个示例中,您在外for循环的每次迭代中传递 3 个对象,在第三个示例中,您传递一个由时间和两个值组成的数组的对象。但是 dygraph 脚本显然需要由三个元素组成的对象,因此您的第二个示例有效。

于 2012-10-21T11:32:15.480 回答