使用for循环创建的两个数组填充对象

时间:2017-05-13 13:54:14

标签: javascript arrays loops push javascript-objects

早上好,

我正在学习Javascript,我在使用循环创建对象和数组时遇到了一些麻烦。我确信这是一个简单的解决方案,但我无法通过阅读一些例子找到解决问题或计算出来。

用于绘制两个变量的绘图代码如下:

var trace1 = {
  x: [0, 1, 2, 3, 4],
  y: [0, 1, 2, 3, 4],
  type: 'scatter'
};
var data = [trace1];

Plotly.newPlot('myDiv', data);

但是当我尝试通过for循环创建x和y然后用这些数组填充对象trace1时,似乎无效。图形出现但内部没有数据。

var x = [];
        for ( i = 0 ; i < 5; i++)
            x.push(x[i]=i);
        var y = [];
        for ( i = 0 ; i < 5; i++)
            y.push(y[i]=i);
        var type = 'scatter'
        trace1 ={x, y, type}

var data = [trace1];

    Plotly.newPlot('myDiv', data);

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

您应该将x.push(x[i]=i)更改为x.push(i)。您使用的前者正在执行两项操作:首先设置x[i] = i,然后将评估结果(i)推到x的末尾

答案 1 :(得分:0)

原因是,在数组中有一个额外的条目是在第一次迭代后array x看起来像x[0] = and x[1] = 0。在第二次迭代后,它看起来像 x[0] = 0, x[1] = 1 and x[2] = 1。同样适用于y array。这是由于为数组赋值以及推送赋值结果的副作用。这样,它在每次迭代中都会添加一个额外的条目。

你需要这样做:

var x = [];
for (i = 0; i < 5; i++)
  x.push(i);
var y = [];
for (i = 0; i < 5; i++)
  y.push(i);
var type = 'scatter'
trace1 = {
  x,
  y,
  type
}

var data = [trace1];

console.log(x);
console.log(y);
//Plotly.newPlot('myDiv', data);

答案 2 :(得分:0)

您可以尝试此代码

&#13;
&#13;
javax.*
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您需要创建与第一个代码示例相同的对象。

var xArr = [];
for ( i = 0 ; i < 5; i++) {
  xArr.push(i);
}

var yArr = [];
for ( i = 0 ; i < 5; i++) {
  yArr.push(i);
}
var typeString = 'scatter'

trace1 = {
  x: xArr,
  y: yArr,
  type: typeString
}

var data = [trace1];
Plotly.newPlot('myDiv', data);
相关问题