簡體   English   中英

一維的二維JavaScript數組問題被忽略

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM