我有问题,我想仅房间ID
我知道io.sockets.manager.rooms
,但它返回对象:/
在代码中(我向客户发送房间列表并检查ID)
io.sockets.on('connection', function(socket) {
socket.join('main');
socket.emit('start',io.sockets.manager.roomClients[socket.id]);
});
和客户:
var socket = io.connect('http://localhost:3250');
socket.on('start', function(data) {
panel.innerHTML = data;
}
解决方案是:
var keys = function( object ) {
if ( !(object && typeof object === 'object') ) {
return null;
}
var result = [];
for (var key in object) {
if (object.hasOwnProperty(key)) {
result.push(key)
}
}
return result;
}
var obiekt = io.sockets.manager.rooms;
socket.emit('rooms', keys(obiekt))
答案 0 :(得分:1)
我不是百分百确定你需要什么。你想要返回一系列房间名称吗?如果是这样,你可以从io.sockets.manager.rooms返回的对象中获取密钥,例如使用Underscore提供的辅助函数:
socket.emit('rooms', _.keys(io.sockets.manager.rooms) );
编辑:我在这里使用过Underscore,但您也可以通过循环遍历对象属性来编写自己的键功能,如下所示:
var keys = function( object ) {
if ( !(object && typeof object === 'object') ) {
return null;
}
var result = [];
for (var key in object) {
if (object.hasOwnProperty(key)) {
result.push(key)
}
}
return result;
}
请注意,这可能会遗漏一些边缘情况,但您明白了