我想创建一个像这样的数组
[
{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!
?
答案 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进行分配。这可能无法完全回答您的问题,但如果您的插座数量有限且数量很少,则会显示执行这些分配的可接受方式。