我正在为我的应用制作图表,并且我遇到了动态变量的问题。图表上单行的变量如下所示:
var trace1 = {
x: [1, 2, 3, 4],
y: [10, 15, 13, 17],
type: 'scatter'
};
必须看起来像这样:
[
var trace1 = {
x: [1, 2, 3, 4],
y: [10, 15, 13, 17],
type: 'scatter'
},
var trace1 = {
x: [1, 2, 3, 4],
y: [10, 15, 13, 17],
type: 'scatter'
}
]
但它必须是动态的:我会询问服务器的行数。现在的问题是制作与服务器所说的trace[i]
个变量一样多的变量。例如,如果响应为3,则必须生成三个变量:
trace1 = {}, trace2 = {}, trace3 = {}
它必须在数组内部:
[trace1 = {}, trace2 = {}, trace3 = {}]
我的问题是:甚至可以做这样的事情?一个循环,它将使例如数组中有3个变量?
这是我的目标:
[trace1 = {}, trace2 = {}, trace3 = {}]
答案 0 :(得分:0)
您可以使用对象而不是数组,然后像对待数组一样遍历键:
traces = {};
for(var i = 1; i <= 10; i++) {
var thisTrace = {
x: [1, 2, 3, 4],
y: [10, 15, 13, 17],
type: 'scatter'
};
traces["trace" + i] = thisTrace;
}
console.log(traces); // all the traces
console.log(traces["trace1"]); // access the "trace1" object
for (var traceName in traces) {
// traceName is the key
// traces[traceName] is the trace object
}
&#13;
答案 1 :(得分:0)
不确定你的意思,但是你想要一个像你所说的对象并且你已经定义了变量,你可以做一些像:
var nbr_of_objects = 3;
var traces_result = {};
for(var i=1;i<=nbr_of_objects;i++){
traces_result["trace"+i] = window["trace"+i];
}
希望得到这个帮助。
var trace1 = {x: [1],y: [10],type: 'scatter'};
var trace2 = {x: [1, 2],y: [10, 15],type: 'scatter'};
var trace3 = {x: [1, 2, 3],y: [10, 15, 1],type: 'scatter'};
var nbr_of_objects = 3;
var traces_result = {};
for(var i=1;i<=nbr_of_objects;i++){
traces_result["trace"+i] = window["trace"+i];
}
console.log(traces_result);
答案 2 :(得分:0)
不合适的解决方案
由于您可以将其存储在对象中,因此可以将名称设置为数组键
var traces = {};
for(var i=0; i<10; i++){
traces["trace"+(i+1)] = {
x: [1, 2, 3, 4],
y: [10, 15, 13, 17],
type: 'scatter'
}
}
然后您可以使用数组的索引(例如traces["trace1"]
或traces.trace1
)访问变量,或者像这样迭代它:
for(var key in traces){
console.log(traces[key])
}
适当的解决方案
var traces = [];
for(var i=0; i<10; i++){
traces.push({
name:"trace"+(i+1),
x: [1, 2, 3, 4],
y: [10, 15, 13, 17],
type: 'scatter'
});
}
您应该迭代数组以查找匹配的跟踪名称属性,而不是使用其名称作为数组的键,并使用for in in:
for(var i=0; i < traces.length; i++){
console.log(traces[i].name);
}