2010-10-21 188 views
1

嘿, 我試着做一個嵌套數組中JSJS嵌套數組

var lines = new Array(
        "0"= new Array(
           0['time']="10:00:00", 
           0['user']="User1", 
           0['content']="Line1", 
           ), 
        "1"= new Array(
           1['time']="20:00:00", 
           1['user']="User2", 
           1['content']="Line2", 
           ), 
        "2"= new Array(
           2['time']="30:00:00", 
           2['user']="User3", 
           2['content']="Line3", 
           ), 
        ); 

Chrome的調試器告訴我的),在第一嵌套數組的結尾是一個「意外的標記」

回答

26

從你的代碼看起來你試圖在JavaScript中使用PHP風格的數組。 JavaScript數組不能像PHP數組一樣工作。這裏的東西,更可能的工作:

var lines = [ 
    { time:  "10:00:00", 
    user:  "User1", 
    content: "Line1" 
    }, 
    { time:  "20:00:00", 
    user:  "User2", 
    content: "Line3" 
    }, 
    { time:  "30:00:00", 
    user:  "User3", 
    content: "Line3" 
    } 
]; 

爲了進一步解釋利特勒,在JavaScript中創建一個新的數組是這樣的:

var myArray = [ 5, 10, 15 ]; 

的方括號([])表示的開始和結束數組和逗號(,)分隔數組中的每個元素。然後,要訪問數組中的元素,我們會做這樣的事情:

alert(myArray[0]); 

...這將使「5」(第一,或「零」的數組中的元素)。

現在,雖然PHP有關聯數組(array('a' => 1, ...)),但JavaScript中沒有「關聯數組」。相反,您使用的「對象常量,」像這樣:

var myObject = { a: 5, b: 10, c: 15 }; 

這將創建與屬性的新對象(你可以把它們想象成鍵)命名爲「A」,「B」和「C」。有兩種方法來訪問屬性:

alert(myObject['b']); 
alert(myObject.b); 

在這兩種情況下,「10」(我們分配財產「B」的值)將被給予。

現在回到練習中。你會看到在這裏我們創建了一個數組([])並給出了三​​個元素,每個元素都是一個對象字面值({})。要訪問,比方說,第一個元素的「用戶」屬性,我們這樣做:

alert(lines[0].user); // => "User1" 

編輯:如果你想命名外數組中的元素,它必須改變一個對象文字,並可以被嵌套像這樣:

var lines = { 
    one: { time:  "10:00:00", 
      user:  "User1", 
      content: "Line1" 
     }, 
    two: { ... 
     }, 
     ... 
}; 

我命名爲清晰起見項目「一」,「二」和「三」,但你可以使用你請的任何值。但是,如果您打算使用數字屬性名稱(例如0,1,2等),那麼您可以使用其他數組而不是對象。與PHP不同,JavaScript不允許數組中存在「間隙」。例如:

var myArr = [1,2]; 
myArr[5] = 3; 
alert(myArr); // => [ 1, 2, undefined, undefined, undefined, 3 ]; 
+0

啊,我想我可能已經弄到我的PHP和JS混在一起了,我試圖同時學習兩者。是否有可能命名父數組的鍵? (只是好奇) – Diesal11 2010-10-21 06:18:56

+0

是的,它是通過做'var line = {「0」:{time:「10:00:00」,...},...}'。然後它成爲一個對象,你可以迭代'for(var i in lines)' – 2010-10-21 06:29:38

+1

Diesal11,我已經爲我的答案添加了一些說明。關於Salman的評論,對這樣的對象屬性進行迭代很棘手,原因有二:首先,它可能具有除你想要的屬性以外的屬性,特別是如果你使用外部庫如jQuery;其次,屬性不會被排序。如果你想以特定的順序迭代它們,你應該使用一個數組 - 對象不是一個有序的數據類型。 – 2010-10-21 06:38:29

3

試試這個

var lines = [ {'time': 'the time', 'user': 'the user', 'content': 'the content'}, {'time': 'the time', 'user': 'the user', 'content': 'the content'}]; 
0

一個小的,標準的, '' 修復


var lines = [{ 
    'time': 'the time', 
    'user': 'the user', 
    'content': 'the content' 
}, 
{ 
    'time': 'the time', 
    'user': 'the user', 
    'content': 'the content' 
}]; 
0

好了,我不認爲這個問題是同方括號,因爲在javaScript數組中可以通過以下任何方式聲明 -

var arr = new Array(element0, element1, ..., elementN); 
var arr = Array(element0, element1, ..., elementN); 
var arr = [element0, element1, ..., elementN]; 

如需更詳細的參考資料,請訪問此MDN link。 根據我的問題可能是關鍵的選擇。
P.S.我是一個初學者,只是從這裏到那邊學習。如果我錯了,那麼請糾正我,因爲這個問題使我陷入困惑。