你有两个问题:
我应该如何创建一个包含许多对象的数组?
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] );