2012-10-21 61 views
0

我推送數據有問題。我想爲繪圖(Dygraphs)準備數據(時間,溫度,溼度)。但是當我用這個代碼填充可變數據時(參見下面),我不會得到圖表。Javascript多個數組push()差異

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]); 
} 

所以我的問題是...哪裏可能是一個問題? 在此先感謝您的答案。

回答

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); 
} 
+0

感謝Bergi給你的建議。問題解決了!此時javascript push()更清晰。 – George

0

第二個(工作)版本根據需要在第一維中創建一個包含time.length個元素的二維數組,每個元素包含三個元素[t, x, y]

在第一個版本中,您將創建一維數組[t0, [x0], [y0], t1, [x1], [y1], ...]

第三個版本不起作用,因爲在第一維中正確創建time.length元素時,元素本身是[t, [[x], [y]]],而不是[t, x, y]

0

每次調用推()在你的data陣列創建新的元素。因此,在第一個示例中,您在外部for循環的每次迭代中傳遞3個對象,並且在第三個示例中傳遞由時間和兩個值組成的數組的對象。但是,dygraph腳本顯然期望由三個元素組成的對象,所以你的第二個例子工作。