将变量动态插入数组

时间:2016-12-20 17:08:30

标签: javascript arrays

我正在为我的应用制作图表,并且我遇到了动态变量的问题。图表上单行的变量如下所示:

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 = {}]

3 个答案:

答案 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;
&#13;
&#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);
}