【问题标题】:JQuery using string as variable nameJQuery 使用字符串作为变量名
【发布时间】:2013-07-26 16:57:57
【问题描述】:

此代码用于在收到数据时更新图表

GraphChannel.on("data", function (newdata) {
    var newdataobj = JSON.parse(newdata), updateGraph = "#graph"+newdataobj.ID, updateData = "data"+newdataobj.ID, updateOptions = "options"+newdataobj.ID;
    incrementArray(newdataobj.ID, newdataobj.Data);
    $.plot(updateGraph, [ updateData ], updateOptions);
    console.log(newdataobj);
    console.log(updateGraph);
    console.log(updateData);
    console.log(updateOptions);
});

控制台日志是:

Object {ID=0, Data=1}
#graph0
data0
options0

如果我删除变量并使用 0 作为 ID 并使用 1 作为数据,代码应如下所示:

GraphChannel.on("data", function (newdata) {
    incrementArray(0, 1);
    $.plot("#graph0", [ data0 ], options0);
});

我不知道为什么这不起作用

递增数组:

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

【问题讨论】:

  • incrementArray 函数有什么作用?
  • @StijnMartens 它将数组中的一个值增加 1,我知道这不是问题的原因,但我已将该函数添加到我的代码中
  • 你想达到什么目的?
  • 变量data0options0没有设置?
  • @StijnMartens 我希望在通道接收到数据时更新我的​​浮动图,但是页面上可能有不同数量的图表,因此它们都有 ID,如 graph0 和 graph2。变量已经设置好了,我只是剪了代码。

标签: jquery variables real-time names


【解决方案1】:

这样做的唯一方法是使用eval()。 但这不是一个好习惯。

什么是使用数组的好习惯:

// Store all your data in an array
var data = [
    'data for plot 0',
    'data for plot 1'
]

// Store all your options in an array
var options [
    {
        //options for plot 0
    },
    {
        //options for plot 1
    }
]

那么当你想要 plot 0 的数据时,你可以使用:

data[0];

// In your case
var updateData = data[newdataobj.ID];

所以你的代码变成这样:

GraphChannel.on("data", function (newdata) {
    var newdataobj = JSON.parse(newdata)
    var updateGraph = "#graph"+newdataobj.ID;
    var updateData = data[newdataobj.ID];
    var updateOptions = options[newdataobj.ID];

    //incrementArray(newdataobj.ID, newdataobj.Data); This function does nothing?

    $.plot(updateGraph, [ updateData ], updateOptions);
});

但我觉得还是有些不对劲。您说要在收到数据时更新绘图。但是您不应该使用新数据放入图表吗? 而不是使用已经存储在文档中的现有数据。

如果我考虑到这一点,我认为您的整体代码应该是这样的:

var options [
    {
        //options for plot 0
    },
    {
        //options for plot 1
    }
]

GraphChannel.on("data", function (newdata) {
    var newdataobj = JSON.parse(newdata)
    var updateGraph = "#graph"+newdataobj.ID;
    var updateOptions = options[newdataobj.ID];

    // Use the newdataobj.Data:
    $.plot(updateGraph, [ newdataobj.Data ], updateOptions);
});

【讨论】:

    猜你喜欢
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    相关资源
    最近更新 更多