我正在使用Flot Chart插件来构建条形图。当脚本接收到新数据时,我需要它将该值增加一。
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
但什么都不起作用。
您可以使用:
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;
好吧,因为你需要根据字母找到正确的子数组,所以你可以循环外部数组,当你找到匹配时,增加数据。这里有一个应该起作用的辅助功能:
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);
});
下面是一个工作示例
主要问题是,当数据结构是数组数组、对数组时,您将其引用为对象上的属性。
你可以使用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");
}
}