忽略第一维的二维JavaScript数组问题

时间:2014-02-23 02:52:15

标签: javascript arrays multidimensional-array

简单地说,我正在根据当前月份和日期填充数组。我不会复制代码以获取当前月份和日期,因为它正常工作。它适当地返回变量'month'和'day'。我的数组列表包含一年中每一天的项目。数组以...开头

new var content = [[]];

然后数组就像这样......(删节)

content[1,1]= "something for Jan 1";
content[1,2]= "something for Jan 2:;

问题在于我要求......

document.write(content[month,day]);

它忽略月份变量并转到该特定日期的最后一个可用日期变量。

我怀疑我正在尝试做一些不可能的事情,但我希望这只是一个小错误。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

JavaScript没有多维数组。此外,它的数组从0开始索引,而不是1.并且第一个语句中的new不属于那里。

所以不要这样:

new var content = [[]];

content[1,1]= "something for Jan 1";
content[1,2]= "something for Jan 2";

您可以使用此:

var content = [ [], [] ];

content[1][1] = "something for Jan 1";
content[1][2] = "something for Jan 2";

或类似的东西。

您应该阅读JavaScript数组语法。听起来你在没有真正知道语言中有效的东西的情况下尝试着。像这样进行实验是好事,但如果你知道什么样的实验可能会成功,那就更好了。

奇怪的是,即使这样的陈述没有达到你想要的效果:

array[ 1, 2 ] = 'foo';

有效的JavaScript。它有什么作用?好吧,JavaScript有一个逗号运算符,它可以计算逗号两边的表达式,并返回右边表达式的值。所以这个表达式:

1, 2

的值为2.换句话说,array[1,2]忽略1并且实际上与array[2]相同,即它返回数组的第三个元素。

您可以在JavaScript控制台中对此进行测试:

var a = [ [10,20], [30,40] ];
console.log( a[1,1] );

那将打印:

[30, 40]

更新

以下是您在评论中链接到的代码的摘录:

var content = [ [], [] ];

content[1][1]= "placeholder.";
content[1][2]= "placeholder.";
// ...
content[1][30]= "placeholder.";
content[1][31]= "placeholder.";
content[2][1]= "placeholder.";
content[2][2]= "placeholder.";
// ...
content[2][30]= "placeholder.";
content[2][31]= "placeholder.";
content[3][1]= "placeholder.";
content[3][2]= "placeholder.";
// ...

那么让我们来谈谈这段代码到底做了什么。首先,这一行:

var content = [ [], [] ];

这会创建一个包含两个元素的数组,其中每个元素本身都是一个空数组。由于JavaScript将数组从0开始索引,因此这两个元素为content[0]content[1]。没有content[2]content[3]等等。那些不存在。

然后执行此语句:

content[1][1]= "placeholder.";

现在content包含:

[ [], [ null, "placeholder." ] ];

不是你想要的,是吗?

当你接到这句话时:

content[2][1]= "placeholder.";

您将收到JavaScript错误:

TypeError: Cannot set property '1' of undefined

这是因为如上所述,content[2]不存在。

看,正如我所说,你需要研究基本的JavaScript概念,比如数组如何工作的细节。有很多很好的教程和参考资料。

还要了解如何使用JavaScript调试器,这样您就可以看到上面的错误,因此您可以交互式地试验代码。

现在回到你想要做的事情。您是否想要为一年中的每个月设置一个数组,每个月的每一天都有什么内容?要初始化数组,我只需要使用一个数组文字。

如果您不介意从零开始编制索引,请使用:

var content = [
    [
        "January First",
        "January Second",
        ...
    ],
    [
        "February First",
        "February Second",
        ...
    ],
    ...
];

然后content[0][0]"January First"content[1][1]"February Second"等。

如果您想在几个月和几天内使用基于1的索引,则可以执行以下操作:

var content = [
    null,
    [
        null,
        "January First",
        "January Second",
        ...
    ],
    [
        null,
        "February First",
        "February Second",
        ...
    ],
    ...
];

现在content[1][1]"January First"content[2][2]"February Second"等。