3

我正在使用 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

但没有任何工作。

4

3 回答 3

3

你会这样做:

data[0][1]++;

数组现在是:

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

小提琴

A用作键,您需要一个对象:

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

data[receiveddata] = 2;
于 2013-07-26T15:14:30.060 回答
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);
});

这是一个工作示例

于 2013-07-26T15:21:39.027 回答
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");
    }

}
于 2013-07-26T15:20:47.967 回答