JQuery使用string作为变量名

时间:2013-07-26 16:57:57

标签: jquery variables real-time names

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

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;
    }
}
}

1 个答案:

答案 0 :(得分:0)

执行此操作的唯一方法是使用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
    }
]

然后,当您想要绘图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);
});