Javascript多数组push()差异

时间:2012-10-21 11:16:32

标签: javascript dygraphs

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

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

3 个答案:

答案 0 :(得分:1)

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

  1. [t, [datagraph…], [datagraph…], t, [datagraph…], [datagraph…], …]
  2. [[t, datagraph…, datagraph…], [t, datagraph…, datagraph…], …]
  3. [[t, [[datagraph…], [datagraph…]]], [t, [[datagraph…], [datagraph…]]], …]
  4. 你经常推动单元素数组,顺便说一句。

    因此,如果您想要循环生成的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脚本显然希望对象由三个元素组成,所以你的第二个例子可以工作。