【问题标题】:Javascript update a value in an array within an arrayJavascript更新数组中数组中的值
【发布时间】:2013-07-26 15:12:45
【问题描述】:

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

但没有任何效果。

【问题讨论】:

  • 你到底为什么不使用对象?您将其视为对象,因此请使用对象。如果其他东西需要数组,请将对象转换为数组。

标签: javascript jquery arrays real-time updates


【解决方案1】:

你会这样做:

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;

【讨论】:

  • 您如何将"A" 转换为0
  • 如何才能更新其他元素,如 C 或 E?
  • 你可以使用 switch 语句w3schools.com/js/js_switch.asp case "A": data[0][1]++;休息;案例“B”:数据[1][1]++;休息;
  • @JoshLukeBlease - 一个数组只有一个编号的索引,如果你需要使用键/值对,你应该使用一个对象。
  • @JoshLukeBlease 您可以使用receiveddata.charCodeAt(0)-65 将字符串转换为数组所需的数字。 jsfiddle.net/rGUKr
【解决方案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】:

    主要问题是当数据结构是数组数组、对数组时,您将它当作对象上的属性来引用。

    你可以使用 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");
        }
    
    }
    

    【讨论】:

    • 这使脚本无法工作,甚至没有开始绘制图形?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 2020-07-01
    • 2018-07-19
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    相关资源
    最近更新 更多