在Javascript中使用多组括号来创建一种类型的数组?

时间:2012-06-20 16:54:56

标签: javascript arrays syntax

就在我认为我对Javascript的语法有所了解的时候,我遇到了类似这样的事情......

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

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 个答案:

答案 0 :(得分:1)

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

为什么他们需要双重包装,没有更多的背景就不知道。

答案 1 :(得分:1)

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

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

当您使用[[]]然后执行data[0]时,您没有使用外部数组,当您输出它时会跳转。

答案 2 :(得分:1)

是的,它是一个嵌套数组。 data数组包含一个数组,其中推送了值为value和值正弦的其他数组。

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)
];
...

答案 3 :(得分:1)

Hunter是正确的 - 它是包含其他数组的数组的语法。您还可以将此作为对象进行查看,如下所示:http://www.quirksmode.org/js/associative.html