2013-07-26 84 views
3

我使用Flot Chart插件構建條形圖。當腳本收到新數據時,我需要它將該值增加1。Javascript更新數組中的數組值

var data = [["A", 0], ["B", 0], ["C", 0], ["D", 0], ["E", 0]] 
$.plot("#placeholder", [data], options); 
channel.on("data", function (receiveddata) { 
    data[receiveddata] = data[receiveddata] + 1 
    $.plot("#placeholder", [data], options); 
}); 

現在說通道接收「A」作爲數據,我想增加一個等。 我的代碼說明了什麼我已經嘗試過,也

data.recieveddata 

,但沒有什麼工作。

+0

世界你爲什麼不使用對象?你把它當作一個對象來對待,所以使用一個對象。如果別的東西需要數組,則將該對象轉換爲數組。 – epascarello

回答

2

好的,因爲您需要根據字母找到正確的子數組,所以您可以循環使用外部數組,並在找到匹配項時循環增加數據。這裏是一個輔助函數,應該工作:

function incrementArray(array, letter){ 
    for(var i = 0; i < array.length; i++){ 
     var subArray = array[i]; 
     if(subArray[0] == letter){ 
      subArray[1]++; 
      return; 
     } 
    } 
} 

然後使用它像這樣:

channel.on("data", function (receiveddata) { 
    incrementArray(data, receiveddata); 
    $.plot("#placeholder", [data], options); 
}); 

Here is a working example

3

你會做到這一點與:

data[0][1]++; 

數組現在是:

[ ["A", 1], ["B", 0], ["C", 0], ["D", 0], ["E", 0] ] 
//^ ^
//|  | 1 in second array 
//0 in first array 

FIDDLE

要使用A作爲重點,你需要一個對象:

var data = {A:0, B:0, C:0}; 

data[receiveddata] = 2; 
+0

以及如何將''A''轉換爲'0'? – musefan

+0

我該怎麼做才能更新C或E等其他元素? –

+0

接收到的數據是 「A」, 「C」,等等。 –

0

主要問題在於,如果數據結構是一個數組數組,它​​是一個對數組,則它就像對象上的一個屬性一樣。

你可以使用jQuery.grep。

var data = [["A", 0], ["B", 0], ["C", 0], ["D", 0], ["E", 0]]; 

$.plot("#placeholder", [data], options); 

channel.on("data", function (receiveddata) { 

    var pair = $.grep(data, function (item) { 
     return item[0] === receiveddata; 
    })[0]; 

    if (pair) { 
     pair[1]++;   
     $.plot("#placeholder", [data], options); 
    } else { 
     console.log("Could not determine receiveddata"); 
    } 

} 
+0

這使腳本無法工作,它甚至不會開始繪製圖表? –