![](/img/trans.png)
[英]Javascript : Checking if two dimensional array contains element in first dimension
[英]Two Dimensional JavaScript Array Issue With First Dimension Ignored
簡要地說,我正在根據當前月份和日期填充數組。 我不會在這里復制代碼以獲取當前的月份和日期,因為它可以正常工作。 它會適當地返回變量“ month”和“ day”。 我的陣列列表中包含一年中每一天的項目。 數組以...開頭
new var content = [[]];
然后以如下形式列出該數組...(節略)
content[1,1]= "something for Jan 1";
content[1,2]= "something for Jan 2:;
問題是當我要求...
document.write(content[month,day]);
它會忽略month變量,並轉到該特定日期的最后一個可用的day變量。
我懷疑我正在嘗試做一些不可能的事情,但是我希望這只是一個小錯誤。 謝謝你的幫助。
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"
"January First"
, "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"
,依此類推。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.