Javascript JS Socket.io为()循环断开连接

Javascript JS Socket.io为()循环断开连接,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我有这个东西 obj = { 'Users': [ 'idxx1', 'idxx2', 'idxx3', 'idxx4', 'idxx5', 'idxx6' ], 'Room1': [ 'idxx1', 'idxx2', 'idxx3', 'idxx4', 'idxx5' ] } 我可以通过以下方式查看Room1的内容: console.log(io.sockets.manager.rooms['Room1']); 结果: [ 'idxx1', 'idxx2', 'idxx3', 'idxx

我有这个东西

obj = { 'Users': [ 'idxx1', 'idxx2', 'idxx3', 'idxx4', 'idxx5', 'idxx6' ], 'Room1': [ 'idxx1', 'idxx2', 'idxx3', 'idxx4', 'idxx5' ] }
我可以通过以下方式查看
Room1
的内容:

console.log(io.sockets.manager.rooms['Room1']);
结果:

[ 'idxx1', 'idxx2', 'idxx3', 'idxx4', 'idxx5' ]
idxx1
idxx2
idxx3
idxx4
idxx5
我可以使用for()循环分别获取每个值:

结果:

[ 'idxx1', 'idxx2', 'idxx3', 'idxx4', 'idxx5' ]
idxx1
idxx2
idxx3
idxx4
idxx5
但当我尝试断开插座时:

for( var key in obj ) {
  io.sockets.sockets[obj[key]].disconnect();
}
(是的,我使用的是Sockets.io 0.9.16而不是v1+,并使用旧的断开方法)

它将每秒断开一次连接,例如:

idxx1
idxx3
idxx5

任何值得赞赏的想法

看来出现问题的原因是
.disconnect()
方法从
obj
数组中删除了一个元素(实际上它从
io.sockets.manager.rooms['Room1']
数组中删除了一个元素,这反映在
obj
上)

因此在第一次迭代中,
obj
等于
['idxx1'、'idxx2'、'idxx3'、'idxx4'、'idxx5']
key
等于
0
,并且
idxx1
被删除。没关系

但是在第二次迭代中,
obj
等于
['idxx2','idxx3','idxx4','idxx5']
key
1
obj[1]
等于
idxx3
。这就是为什么我认为,
idxx2
被跳过的原因。这同样适用于
idxx4

我看到了以下解决方案——使用
for
循环(而不是
for in
)以相反顺序迭代
obj

或者对每个
迭代使用零索引:

for (var i = 0, length = obj.length; i < length; i++) {
  io.sockets.sockets[obj[0]].disconnect();
}
for(变量i=0,长度=obj.length;i
这很有道理,没有考虑到断开连接时会删除
idxxx
。又像个迷人的家伙一样工作了!