2010-10-21 187 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.我是一个初学者,只是从这里到那边学习。如果我错了,那么请纠正我,因为这个问题使我陷入困惑。