0

就在我认为我正在理解 Javascript 的语法时,我遇到了这样的事情......

我在jqPlot 插件页面 上看到了这段代码。

[[]]javascript中有什么样的数组?嵌套数组?我以为我理解了双括号,但在评论文本中,我不明白为什么会有一个额外的集合(下面的问题)。

$(document).ready(function(){
// Our data renderer function, returns an array of the form:
// [[[x1, sin(x1)], [x2, sin(x2)], ...]]
var sineRenderer = function() {
var data = [[]];
for (var i=0; i<13; i+=0.5) {
  data[0].push([i, Math.sin(i)]);
}
return data;
};

为什么这个注释语句(最外面的一组)中有一组额外的括号?

[[[x1, sin(x1)], [x2, sin(x2)], ...]]

谢谢

4

4 回答 4

1

是的,它是一个嵌套数组。该data数组包含一个数组,具有值和该值的正弦的其他数组被推送到该数组。

AFAIK,jQPlot 插件将使用其中的每个数组data来打印一个新图形。你可以例如做

function graph(fn, from, to, gap) {
    // creates an array with points
    var res = [];
    for (var i=from; i<to; i+=gap) {
        res.push([i, fn(i)]);
    }
    return res;
}

var data = [
   graph(Math.sin, 0, 13, 0.5),
   graph(Math.cos, 0, 13, 1)
];
...
于 2012-06-20T17:00:13.353 回答
1

Hunter 是正确的——它是包含其他数组的数组的语法。您还可以将其视为一个对象,如下所示:http ://www.quirksmode.org/js/associative.html 。

于 2012-06-20T17:01:59.430 回答
1

如果他们说,那将是一组括号data.push。由于数组的第 0 个元素是一个数组,因此它们用于data[0].push在其中填充内容。

为什么他们需要双重包装,没有更多上下文就不知道了。

于 2012-06-20T16:57:07.440 回答
1

由于您要在数组中放入data数组(在数组中创建数组),因此这样做可以避免:

var data = [];
for (var i=0; i<13; i+=0.5) {
  data.push([i, Math.sin(i)]);
}

当你使用[[]]然后 dodata[0]时,你没有使用外部数组,当你输出它时会跳进去。

于 2012-06-20T16:59:10.217 回答