如何创建包含对象的数组

时间:2013-01-28 14:15:20

标签: javascript arrays object

我想创建一个像这样的数组

[
    {sessionId: '12345', nickname: 'timmay!', socketIds: [1, 2, 3]},
    {sessionId: '23456', nickname: 'pete', socketIds: [4, 5, 6]}
]

我定义了一个这样的数组

var  myarray = []

现在我想像上面的例子那样创建这个结构

如果你注意到我们的object socketIds: [4, 5, 6]内有一个数组 我应该如何创建一个包含许多对象的数组以及如何调用它们?

对于上面的示例,如果我们将此命名为myarray,我该如何调用socketIds 1或timme!

5 个答案:

答案 0 :(得分:3)

你有两个问题:

我应该如何创建一个包含许多对象的数组?

var myarray = [];
myarray[0] = {};//make an empty object
myarray[0].sessionId = '12345';//in JS assigning something to a property of an object creates/updates it
myarray[0].nickname = 'timmay!';
myarray[0].socketIds = [];//create an empty array
myarray[0].socketIds[0] = 1;//assign the first element of array called socketIds in the first object of the array called myarray
myarray[0].socketIds[1] = 2;
myarray[0].socketIds[2] = 3;

myarray[1] = {};
myarray[1].sessionId = '12345';
myarray[1].nickname = 'timmay!';
myarray[1].socketIds = [ 4, 5, 6];

如果我们将此myarray命名为如何调用socketIds 1或timme,我应该如何调用它们?

alert( myarray[0].socketIds[0] );
alert( myarray[0].nickname );

<强> EDIT1:

通常你会使用for()循环来处理数组,但是如果你想从Javascript引擎中获得最大的性能,你可以考虑保存数组引用而不是每次都引用它们。像这样:

var myarray = [];
var tmpObj = myarray[0] = {};//make an empty object
tmpObj.sessionId = '12345';//in JS assigning something to a property of an object creates/updates it
tmpObj.nickname = 'timmay!';
var tmpArr = tmpObj.socketIds = [];//create an empty array
tmpArr[0] = 1;//assign the first element of array called socketIds in the first object of the array called myarray
tmpArr[1] = 2;
tmpArr[2] = 3;

但我非常确定现代Javascript引擎会处理这些重复引用,并且最终代码将尽可能快地保存引用。

<强> EDIT2:

当然,显然你在自己的问题中写的是初始化数组的有效语法(对象和数组文字):

var myarray = [
    {
        sessionId: '12345', 
        nickname: 'timmay!', 
        socketIds: [1, 2, 3]
    },
    {
        sessionId: '23456',
        nickname: 'pete',
        socketIds: [4, 5, 6]
    }
];

此语法的问题在于您必须对值进行硬编码,这不是在Javascript中创建复杂数据结构的最常用方法。无论如何,它将创建与我在本答案开头提到的第一个解决方案相同的对象。所以你仍然可以访问这样的部分:

alert( myarray[0].socketIds[0] );

答案 1 :(得分:2)

这就是你需要打电话的方式

    var arr = [
        {sessionId: '12345', nickname: 'timmay!', socketIds: [1, 2, 3]},
        {sessionId: '23456', nickname: 'pete', socketIds: [4, 5, 6]}
    ];

    document.write(arr[0].nickname+"<br>");
    document.write(arr[0].socketIds[0]);

答案 2 :(得分:1)

这个数据结构类似于python字典类型。 试试这个Dictionary equivalent data structure?

答案 3 :(得分:1)

不确定您的问题是否真的很简单,但您展示的代码已经使用文字符号创建了一个对象数组。所以只需将其分配给变量:

var myarray = [
    {sessionId: '12345', nickname: 'timmay!', socketIds: [1, 2, 3]},
    {sessionId: '23456', nickname: 'pete', socketIds: [4, 5, 6]}
];

要访问您提到的元素:

console.log(myarray[0].socketIds[0]); // 1
console.log(myarray[0].nickname);     // "timmay!"

如果您以后想要添加另一个对象:

var newObject = {sessionId: '34567', nickname: 'john', socketIds: [7, 8, 9]};
myarray.push(newObject);

答案 4 :(得分:1)

按如下方式初始化变量:

var myArray = [{}, {}],
    socket1 = myArray[0],
    socket2 = myArray[1];

现在分别对socket1和socket2进行分配。这可能无法完全回答您的问题,但如果您的插座数量有限且数量很少,则会显示执行这些分配的可接受方式。