忽略第一个维度的二维JavaScript数组问题
简单地说,我正在基于当前月份和日期填充一个数组。我不会复制代码来获取当前月份和日期,因为它工作正常。它适当地返回变量“月”和“日”。我的数组列表中每天都有一个项。数组以忽略第一个维度的二维JavaScript数组问题,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,简单地说,我正在基于当前月份和日期填充一个数组。我不会复制代码来获取当前月份和日期,因为它工作正常。它适当地返回变量“月”和“日”。我的数组列表中每天都有一个项。数组以 new var content = [[]]; 然后数组如下所示。。。(节选) 问题是当我要求 document.write(content[month,day]); 它忽略月变量,并转到该特定日期的最后一个可用日变量 我怀疑我试图做一些不可能的事情,但我希望这只是一个小错误。感谢您的帮助。JavaScript没有多维数组。
new var content = [[]];
然后数组如下所示。。。(节选)
问题是当我要求
document.write(content[month,day]);
它忽略月变量,并转到该特定日期的最后一个可用日变量
我怀疑我试图做一些不可能的事情,但我希望这只是一个小错误。感谢您的帮助。JavaScript没有多维数组。此外,其数组的索引从0开始,而不是从1开始。你第一句话中的
新的不属于那里
因此,与此相反:
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]
。没有内容[2]
,内容[3]
等。这些内容不存在
然后执行以下语句:
content[1][1]= "placeholder.";
content[2][1]= "placeholder.";
现在,内容
包含:
[ [], [ null, "placeholder." ] ];
不是你想要的,是吗
当你说到这句话:
content[1][1]= "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",
...
],
...
];
然后内容[0][0]
是一月一日,内容[1][1]
是二月二日,等等
如果要对月份和天数使用基于1的索引,可以执行以下操作:
var content = [
null,
[
null,
"January First",
"January Second",
...
],
[
null,
"February First",
"February Second",
...
],
...
];
现在内容[1][1]
是“一月一日”
,内容[2][2]
是“二月二日”
,等等。试试内容[1][2]=“一月一日”代码>取而代之。我不知道这个逗号符号是从哪里来的,但它并不完全有效。谢谢Michael。然而,在你的例子中,我现在得到了一个“未定义”的结果。哪个例子?末尾的var a=…
正确且有效。如果你有不起作用的代码,请将完整代码添加到你的问题中,我很乐意看一看。对不起,我在看到你添加的注释之前发送了该代码。我指的是第一个例子。var内容=[],[];内容[1][1]=“1月1日的某物”;内容[1][2]=“1月2日的某物”;这只是一些示例代码,展示了如何访问数组数组。这并不是一个完整的工作示例——没有生成任何输出的代码。发布不起作用的代码-完整的代码。如果您可以查看的话,我不会发布300多行代码,而是将其上传到[link]www.gensoup.org/work/content.js。输出将来自调用文件中的简单document.write语句。