我正在尝试使用node.js socket.io和不同的房间。我有连接的所有用户的昵称对象,但问题是在这个对象中我不能存储用户ID的重复值,因此我不能让同一个用户使用不同的房间。现在,我想为每个房间制作不同的对象,而不是所有用户的这个昵称对象。那我怎么能这样做:nicknames [specific_room] [user.id] =代码的其余部分..?那么,我应该为每个房间单独列出数据?或者我应该为每个单独的房间使用动态变量名称?你有什么建议吗?
nicknames[user.id]={
'nickname': user.name,
'socketId': socket.id,
'room': room,
};
结果:
{ '1':
{ nickname: 'User1',
socketId: '/#0rb7zbg0RInwKAaMAAAC',
room: '4444',
},
'3':
{ nickname: 'User 2',
socketId: '/#tGZPL8IUPvUoie1CAAAD',
room: '3333',
}
}
我想要完成什么:
{ 3333 { { '1':
{ nickname: 'User1',
socketId: '/#0rb7zbg0RInwKAaMAAAC',
},
'3':
{ nickname: 'User 2',
socketId: '/#tGZPL8IUPvUoie1CAAAD',
}
}
}
4444 {
}
}
其中3333和4444是房间唯一ID。 我希望我说清楚。
答案 0 :(得分:0)
我没有使用socket.io,但你可以使用普通的javascript轻松做这样的事情(可能不是最优雅的解决方案,但它工作正常):
var obj = {
'1': {
nickname: 'User1',
socketId: '/#0rb7zbg0RInwKAaMAAAC',
room: '4444',
},
'3': {
nickname: 'User 2',
socketId: '/#tGZPL8IUPvUoie1CAAAD',
room: '3333',
}
};
var obj2 = {};
for(var i in obj) {
obj2[obj[i].room] = {};
obj2[obj[i].room][i] = {
nickname: obj[i].nickname,
socketId: obj[i].socketId
};
}
console.log(obj2);