1

我想创建一个这样的数组

[
    {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!

4

5 回答 5

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 命名为 myarray,我应该如何调用它们,我应该如何调用 socketIds 1 或 timme!?

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

编辑1:

通常你会使用 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 引擎会处理这些重复引用,最终代码将与不保存引用一样快。

编辑2:

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

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

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

alert( myarray[0].socketIds[0] );
于 2013-01-28T14:20:25.537 回答
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]);
于 2013-01-28T14:24:09.923 回答
1

这个数据结构类似于python字典类型。试试这个Dictionary 等效数据结构?

于 2013-01-28T14:20:09.713 回答
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);
于 2013-01-28T14:22:23.373 回答
1

初始化变量如下:

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

现在分别对 socket1 和 socket2 做你的任务。这可能无法完全回答您的问题,但如果您的套接字数量有限且数量较少,则它显示了进行此类分配的可接受方式。

于 2013-01-28T14:27:11.867 回答