2010-07-14 70 views
1

現在我目前有一個包含120對的數組。例如:修改數組中的childeren

[[1, 12], 
[2, 15], 
[3, 10]] 

基本上120長。現在我在Jquery Flot圖中使用這些數據。 「I have a live example on jsFiddle here

代碼:

var numbers = []; 
var jsonString = ""; 
var PlotData; 
var x = 0; 

function EveryOneSec() { 
    if (numbers.length == 120) { 
     numbers.shift(); 
    } 
    numbers.push([x++, Math.random()*10]); 
    PlotData = numbers; 
    $.plot($("#PlaceHolder"), [{ data: PlotData, points: { show: true},lines: { show: true }}]); 
    console.log(PlotData); 
    setTimeout(EveryOneSec, 1000); 
} 
EveryOneSec(); 

我創建上飛(see jsFiddle Example)的數字只是1將第一個數字和數學隨機的二號簡單的增量現在這一切運作良好,罰款,並再次坐在他們的計數看到jsfiddle的例子。

現在我想嘗試做的是,而不是增加數字1是玩數組。因此數組中的第一對總是[1,##],而第120對總是[120,##]。這個想法是,它每1秒更新一次,因此最接近左側軸的最終結果是120,顯示120秒前或2分鐘。

所以問題是:最有效的方法是什麼?

因爲即將進行下一次更新,動態添加的數字將會過時。

回答

1

具有120個元素的數組不需要很長的時間就可以迭代,所以對它做一個for ... next就可以了,IMO。清理代碼,你可以有:

var numbers = []; 
var jsonString = ""; 

function EveryOneSec() { 
    numbers.push(Math.round(Math.random()*10)); // generate integer from 0-10 
    numbers = numbers.slice(-120); // keep only the last 120 max elements every time 
    var PlotData = $.map(numbers, function(n,i) { return [[i+1,n]]; }); 
    $.plot($("#PlaceHolder"), [{ data: PlotData, points: { show: true},lines: { show: true }]); 
    console.log(PlotData); 
} 
var timer = setInterval(EveryOneSec, 1000); 

// you can stop the timer with clearInterval(timer); 

******編輯****:上面的代碼將從右至左「滾動」的點,扭轉這一點,你可以不印字的數據,而不是推動,簡單地通過此

numbers.unshift(Math.round(Math.random()*10)); // generate integer from 0-10 
numbers = numbers.slice(0, 120); // keep only the fist 120 max elements every time 

你將「滾動」從左至右:)

要反轉軸線(從120到0)代替函數的前兩行,只需替換返回值:[[120-i,n]]

+0

非常明確的答案和快速響應謝謝。 – Sphvn 2010-07-14 03:15:08

+0

現在是的,我想他們從右到左:) Buttt ..我將如何扭轉軸。例如,120,119,118。使0最右邊,120最左邊。如果你明白我的意思。 – Sphvn 2010-07-14 03:16:05

+0

沒問題:)我也回答了下面的評論:) – 2010-07-14 03:16:05