我正在使用flot api绘制图表。请查看此图表类型HERE 在那个例子中,他们使用了像
这样的值var sin = [], cos = [];
for (var i = 0; i < 14; i += 0.5) {
sin.push([i, Math.sin(i)]);
cos.push([i, Math.cos(i)]);
}
现在,当我替换了
时,图表被绘制为“弯曲”的线条sin.push([i, Math.sin(i)]);
cos.push([i, Math.cos(i)]);
用,
sin[i]=[i, Math.sin(i)];
cos[i]=[i, Math.cos(i)];
然后使用直线绘制图表。我现在有两个问题。
1)两种阵列分配有什么区别?
2)这是因为数组赋值或API行为的不同吗?
任何帮助非常感谢!感谢。
编辑:将i设置为1并使用推送方法或默认分配设置不同的值,您将得到相同的结果。
答案 0 :(得分:4)
我不是整数。您只能在数组索引中使用int。
1)两种类型的阵列分配有什么区别? A)没有,除了推送下一个int的索引。
2)这是因为数组赋值或API行为的不同吗? A)是的,数组无效,因为键的1.5值被解析为字符串,api无法按预期读取数组。
尝试使用apis方式或使用for语句的不同值。
答案 1 :(得分:3)
我认为i
增量存在问题。很明显,每次迭代i
增加0.5,而不是1.看看:
for (var i = 0; i < 14; i += 0.5)
因此sin[i]=...
将无法正常运作。但是sin.push(...)
会有用。
答案 2 :(得分:2)
数组索引不能是分数,而且总是字符串,因此数字 1.5正在转换为字符串'1.5',序列将为'0','0.5','1 ','1.5'等等。但是使用 push ,所有索引都是整数字符串,因此将是0,1,2等。
毫无疑问,正在使用基于整数的循环来读取数组中的值,因此它会跳过.5个(即每隔一个元素)并给出锯齿状边缘。
答案 3 :(得分:1)
通常情况下这会有效,但在这种情况下,您将i
增加0.5
,这会导致i
成为float
- 值。
查看两种变体的输出:
// push
// cos
[[0, 1],
[0.5, 0.8775825618903728],
[1, 0.5403023058681398],
[1.5, 0.0707372016677029],
[2, -0.4161468365471424],
[2.5, -0.8011436155469337], ...]
// sin
[[0, 0],
[0.5, 0.479425538604203],
[1, 0.8414709848078965],
[1.5, 0.9974949866040544],
[2, 0.9092974268256817],
[2.5, 0.5984721441039564], ...]
// array-index
// cos
[[0, 1],
[1, 0.5403023058681398],
[2, -0.4161468365471424],
[3, -0.9899924966004454],
[4, -0.6536436208636119], ...]
// sin
[[0, 0],
[1, 0.8414709848078965],
[2, 0.9092974268256817],
[3, 0.1411200080598672],
[4, -0.7568024953079282], ...]