Javascript更新数组中数组中的值



我正在使用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");
    }
}

相关内容

  • 没有找到相关文章

最新更新